关键词

深入浅析JavaScript中的作用域和上下文

标题:深入浅析JavaScript中的作用域和上下文

一、作用域

作用域是指在代码中定义变量的区域,规定了变量的有效范围和可访问性。JavaScript 中有两种作用域:全局作用域和局部作用域。

1.1 全局作用域

以 var 关键字定义的全局变量,其作用域是整个 JavaScript 代码块。可以在任何位置调用这个全局变量。

var globalVariable = "I am a global variable";
function printGlobalVariable(){
    console.log(globalVariable);
}
printGlobalVariable();  // I am a global variable

1.2 局部作用域

以 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 中有两种上下文:全局上下文和函数上下文。

2.1 全局上下文

在任意位置运行的 JavaScript 代码都处于全局上下文环境中。在全局上下文环境中,this 的指向是 window 对象。

console.log(this);  // window

2.2 函数上下文

在函数被调用时,它的执行环境会被放入调用栈中,并创建一个新的上下文环境。在函数上下文环境中,this 的指向和函数的调用方式有关。

2.2.1 函数作为方法被调用

如果函数作为对象的方法被调用,将通过该对象来传递 this 指向。

let myObject = {
    name: "My object",
    sayName: function(){
        console.log(this.name);
    }
};
myObject.sayName();  // My object

2.2.2 函数作为普通函数被调用

如果函数作为普通函数被调用,将通过全局对象 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

完整的攻略就是这样了。希望对你有所帮助。

本文链接:http://task.lmcjl.com/news/12004.html

展开阅读全文