js作用域链
# js作用域链
JavaScript 中的作用域链是一种数据结构,用于管理变量和函数的访问权限。它表示 JavaScript 程序中从当前执行环境到全局执行环境的一个链式列表。
作用域链中的每一个执行环境(一般是函数或块级作用域)都包含一个变量对象,该对象保存了该执行环境内的所有变量和函数声明。
当 JavaScript 程序试图访问一个变量或函数时,它会沿着作用域链从当前执行环境向上搜索,直到找到该变量或函数为止。如果没有找到,则会抛出 ReferenceError。
var x = 10;
function foo() {
var y = 20;
function bar() {
var z = 30;
console.log(x + y + z);
}
bar();
}
foo();
// 输出 60
说明:有三个变量:x,y 和 z。当 bar 函数被调用时,它会创建一个新的执行环境,并在该执行环境中声明一个新的变量 z。
当 bar 函数试图访问变量 x 时,由于它不在当前执行环境中,因此 JavaScript 引擎会在其作用域链(从当前执行环境向上)中寻找该变量。
# 分享几个关于js'链的题目
1、
var x = 10;
function fn() {
console.log(x);
}
function show(f) {
var x = 20;
f();
}
show(fn);
--------------------------10---------------
原型链的查找是按照函数定义时的位置开始查找,与函数调用位置无关
2、
var x = 10;
function fn() {
console.log(x);
}
function show(f) {
x = 20;
f();
}
show(fn);
--------------------------------------20-------------------------
3、
var fn = function () {
console.log(fn)
}
fn()
var obj = {
fn2: function () {
console.log(fn2)
}
}
obj.fn2()
----------------------------------------------
f(){
console.log(fn)
}
ReferenceError