javascript函数作用域和嵌套调用关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WRian_Ban/article/details/51601733

JavaScript 的作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域。

特别注意:JavaScript 的作用域完全是由函数来决定的, if 、 for 语句中的花括号不是独立的作用域。

在函数中引用一个变时,JavaScript 会先搜索当前函数作用域,或者称为“局部作用域”,如果没有找到则搜索其上层作用域,一直到全局作用域。

函数作用域的嵌套关系是定义时决定的,而不是调用时决定的,也就
是说,JavaScript 的作用域是静态作用域,又叫词法作用域,这是因为作用域的嵌套关系可以在语法分析时确定,而不必等到运行时确定。下面的例子说明了这一切:
var scope = ‘top’;
var f1 = function() {
console.log(scope);
};
f1(); // 输出 top
var f2 = function() {
var scope = ‘f2’;
f1();
};
f2(); // 输出 top
这个例子中,通过 f2 调用的 f1 在查找 scope 定义时,找到的是父作用域中定义
的 scope 变量,而不是 f2 中定义的 scope 变量。这说明了作用域的嵌套关系不是在调用
时确定的,而是在定义时确定的。

猜你喜欢

转载自blog.csdn.net/WRian_Ban/article/details/51601733