标题:深入浅析JavaScript中的作用域和上下文
作用域是指在代码中定义变量的区域,规定了变量的有效范围和可访问性。JavaScript 中有两种作用域:全局作用域和局部作用域。
以 var 关键字定义的全局变量,其作用域是整个 JavaScript 代码块。可以在任何位置调用这个全局变量。
var globalVariable = "I am a global variable";
function printGlobalVariable(){
console.log(globalVariable);
}
printGlobalVariable(); // I am a global variable
以 let 或 const 关键字定义的局部变量,其作用域只在块级作用域内有有效。块级作用域是指 if 语句、函数等花括号内的代码。
function printLocalVariable(){
let localVariable = "I am a local variable";
console.log(localVariable);
}
printLocalVariable(); // I am a local variable
console.log(localVariable); // ReferenceError: localVariable is not defined
上下文是指函数执行时内部 this 对象的指向。JavaScript 中有两种上下文:全局上下文和函数上下文。
在任意位置运行的 JavaScript 代码都处于全局上下文环境中。在全局上下文环境中,this 的指向是 window 对象。
console.log(this); // window
在函数被调用时,它的执行环境会被放入调用栈中,并创建一个新的上下文环境。在函数上下文环境中,this 的指向和函数的调用方式有关。
如果函数作为对象的方法被调用,将通过该对象来传递 this 指向。
let myObject = {
name: "My object",
sayName: function(){
console.log(this.name);
}
};
myObject.sayName(); // My object
如果函数作为普通函数被调用,将通过全局对象 window 来传递 this 指向。
function sayName(){
console.log(this.name);
}
let myObject2 = {
name: "My object 2",
sayName: sayName
};
let name = "globalName";
myObject2.sayName(); // My object 2
sayName(); // globalName
完整的攻略就是这样了。希望对你有所帮助。