之前一直不懂什么是js中的执行上下文,花了整整一天的时间终于弄明白后,现在却感觉无从下手了。
总结:js代码执行之前的准备工作就叫做执行上下文。
分为3种,但是现在我们一般只看两种:全局上下文和函数上下文。
这篇文章主要说说函数上下文:
函数上下文的执行过程分为2步:预编译和执行。
预编译分为4步:
- 创建AO对象,寻找形参和变量声明
- 把形参和变量名作为AO对象的属性名,值为undefined
- 把实参赋给形参,实参形参统一
- 寻找函数声明,值为函数体(提现形式为字符串)
注意点1:
function foo(i) {
a = 1;
}
foo(3);
console.log(a) ;1
函数中的变量没有进行声明,统一为全局变量,但是要在执行函数后生效,如果没有执行,会报错 a is not defined
注意点2:
var message = 'global'
function foo(){
console.log(message)
}
function bar (){
var message = 'Bar'
foo()
}
bar() // global
var message = 'global'
function bar (){
var message = 'Bar'
function foo(){
console.log(message)
}
foo()
}
bar() // Bar
函数作用域的区别,注意