本文将与您分享关于JavaScript范围的示例分析内容。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。
00-1010作用域只是变量、函数和对象定义后的可用作用域。
console.log(a)
{
vara=1;
}
function test(){ 0
varb=2;
}
可以看出,变量B不能在外部使用。可以看出,该范围可以保护数据免受外部随机访问和修改。简单可见,作用域可以隔离彼此的变量,即不同作用域中同名的变量不会冲突。
最重要和最常用的范围是全局范围和函数范围。然而,在ES6之后,由于let和const关键字,它作为块级范围被引入。
00-1010全局作用域仅仅意味着所有的域都可以访问服务器域下的变量和方法对象。
Vara=“全局1”;
function test(){ 0
B='不带var,隐式转换为全局变量';
Window.c='直接以变量c为窗口也会变成全局';
Vard=“非全局范围”;
}
#第一步是执行测试()
Test()#这样,方法中的变量将被定义和赋值。
#第二步
console.log(a)
console.log(b)
console.log(c)
控制台日志(d)
一般来说,window的属性是全局变量,而window.c的真实表达式将C作为window的一个属性。声明变量时注意不要带var。最好带var,这样就不会提升为全局变量,导致数据相互污染。
顺便说一下,测试方法也是全局域下的方法。
function test(){ 0
vara=function(){ 0
Console.log('文字方法')
}
b=函数(){ 0
Console.log('不带变量文字的方法')
}
function test1(){ 0
Console.log('通用声明方法')
}
}
可以看到这种文字声明的方法,类似于将函数赋给变量并将其视为变量的方法。这也在预编译中得到了证明。
作用域
函数作用域与全局作用域相反,它不是用于所有的地方,而是用于一定的范围,一般声明的变量只在函数内部使用。
function test(){ 0
Vara=“非全局范围”;
console.log(a)
}现在
又有了一个问题,全局方法里面可以用函数作用域内部的变量。那么函数是内部是否可以有其下面的函数生成的函数作用域呢?以及其变量是否可以相互用?
function test(){ var a="test方法作用域"; function test1(){ var b="test1方法作用域"; console.log("a的值=",a); } # 调用函数内部函数 test1(); console.log("b的值=",b); }
这个地方可以看出作用域是分层的,内层作用域可以访问外层作用域的变量,外部访问不了内部的变量。
if,switch,for ,while
条件语句和逻辑循环,**它们不是函数同样也不像函数,也不会创建一个新的作用域。**其块定义的变量将保留在它们存在的作用域中。
function test(a){ if(a>1){ var b=13; }else{ var b=1; } console.log(b); }
所以在使用条件语句和逻辑循环的时候,尽可能不要再全局作用域下使用。因为其方法体中的变量会影响其他的数据。
块作用域
块作用域的出现,一般需要依赖两个关键字let或const之一,不然就不会存在这个块作用域。
function test(a){ const b="23"; if (a>2){ const c=3 console.log("第一个人if---c-----",c) } if (a>1){ console.log("第二个人if----b----",b) console.log("第二个人if----c----",c) } }
可以看出如果有关键字let和const后,其变量的范围就是在其声明的那一对花括号内。所以第一个if中的c变量再第二个if的里面无法取得。当然还是遵守:内层作用域可以访问外层作用域的变量。
了解let和const看前一篇:地址
作用域链
这个看似很神奇的概念,简单的说就是作用域内有就直接用,没有找上一层,如果都没有,找到全局就结束。
var a=1 var b=3 function test(){ var a=2 console.log("a的值",a); console.log("b的值",b); }
感谢各位的阅读!关于“JavaScript作用域的示例分析”这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/91872.html