第一题
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