Js作用域(Scope)

在 JavaScript 中,变量的作用域只有两种方式:

  • 全局作用域
  • 函数作用域

请记住,JavaScript 中的作用域是在我们使用 var关键字定义变量时声明的。

全局作用域(Global Scope)

在 javascript 中声明的变量在以下情况下将具有全局作用域

在任何函数之外定义的变量

//'foo' 是一个全局变量
var foo = 'I am GLOBAL foo';
//'foo' 是函数局部变量
function test() {
    var foo = 'I am LOCAL foo';
}
console.log(foo); // 全局变量

在任何函数中定义的变量 - 不使用 'var' 关键字

//'foo' 函数局部变量
function test() {
    foo = 'I am GLOBAL foo';
}
console.log(foo); // 全局变量
console.log(window.foo); // 全局变量

所有全局范围的变量都作为“window”对象的属性可见。

混合全局和函数作用域变量

示例:我们将在单个页面的不同范围内使用变量 'foo',然后我们将清楚 javascript 范围是如何工作的。

//Define global scoped 'foo'
var foo = 'I am GLOBAL foo';
//Inside if block foo will refer to global foo
if ( true ) {
    var foo = 'I am GLOBAL foo TOO';
    console.log( foo ); 		//I am GLOBAL foo TOO
}
//As blocks do not have their own scope
//So foo in if block referred to global scope foo
//foo refer to new value
console.log( foo );  			//I am GLOBAL foo TOO
//Inside function - foo has it's own declaration
function test() {
    var foo = 'I am LOCAL foo';
    console.log( foo );  		//I am LOCAL foo
}
test();
//Ouside function foo is still globally declared foo
console.log( foo );				//I am GLOBAL foo TOO

看看 foo如何只在函数内部声明有它自己的作用域,否则所有的 foo变量都指向全局作用域 foo

提示:无论作用域如何,我们都应该始终使用 var 初始化变量。
这样,变量将具有我们预期的范围,并且我们可以避免意外的全局变量。

www. On IT Road .com

函数作用域

从全局作用域细节可以清楚地看出,函数作用域变量是在函数内部使用 'var' 关键字声明的。

//'foo' 函数局部变量
function test() {
    var foo = 'I am LOCAL foo';
    console.log(foo); //I am LOCAL foo
}
console.log(foo); //foo未定义:

请注意,javascript 函数有自己的作用域,但块(例如 while、if 和 for 语句)没有。

日期:2020-09-17 00:10:39 来源:oir作者:oir