JavaScript每天一练,锻炼全局预编译和局部预编译,两道练习题(里面附详细解题过程)

导读:本篇文章讲解 JavaScript每天一练,锻炼全局预编译和局部预编译,两道练习题(里面附详细解题过程),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

第一题 

console.log(a);
var a;
a = 10;
console.log(a);
function a(){}
var  a = function(){}
console.log(a)

请问预编译后 a的值是?

代码执行后,每个console.log(a)的结果是??

 看到这道题,是不是很懵?不要着急,先恶补一下概念

全局预编译
        第一步:创建 GO对象,(global Object)
        第二步:找变量声明,将变量声明作为GO对象的属性值传进去,赋值为undefined。
        第三步:找函数声明(不要找函数表达式),赋值于对应的Go属性值。

 1、首先,按照第一步创建GO对象

GO{  }

2、找变量声明,将变量声明作为GO对象的属性值传进去,赋值为undefined

GO{ 

a:undefined     // 找到了a,并赋值undefined

}

3、找函数声明(不要找函数表达式),赋值于对应的Go属性值

GO{ 

a:function  a(){}     // 普通函数会整体提前

}

4、代码执行后的结果是

console.log(a);  //   a:function  a(){} 
var a;
a = 10;
console.log(a); //  a:10
function a(){}
var  a = function(){}
console.log(a)  //   a:function (){}

第二题

function a(x){
  console.log(x);
  var x = 123;
  console.log(x);
  function x(){}
  var b = function(){}
  console.log(b);
}

a(1)

请问预编译后x,b的值是?

代码执行后,每个console.log(x),console.log(b)的结果是??

看到这道题,是不是很懵?知道这是考察什么吗嘛,先恶补一下概念

局部预编译
    1.创建AO(Active Object)对象
    2.找函数的形参和变量声明,将变量声明和形参作为AO属性名,值为undefined
    3.将实参值和形参统一
    4.在函数体里面找函数声明(只找函数声明,不找函数表达式),值赋予函数体

 

1.创建AO(Active Object)对象

AO{

}

2、找函数的形参和变量声明,将变量声明和形参作为AO属性名,值为undefined

AO{

x:undefined

b:undefined

}

3.将实参值和形参统一

AO{

x: 1

b:undefined

}

 4.在函数体里面找函数声明(只找函数声明,不找函数表达式),值赋予函数体

AO{

x: function x(){}

b:undefined

}

5、代码执行后,每个console.log(x),console.log(b)的结果是??

function a(x){
  console.log(x);  // function x(){}
  var x = 123;
  console.log(x);  //123
  function x(){}  //默认整体提前,写在哪里都一样
  var b = function(){}  
  console.log(b);  //  function(){}  
}

a(1) 

x: function x(){}

x:123

b: function(){}

  • 注意:
    • 普通函数整体提前
    • 变量 声明提前

你学会了吗?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46304.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!