首页 > 编程知识 正文

js作用域是什么,作用域有哪些

时间:2023-05-05 06:59:03 阅读:153988 作者:2799

范围(范围) :函数和变量的使用范围

全局作用域:函数外部的作用域

函数作用域; 函数中的作用域

块级作用域: { }包含的代码

一.全局范围let uname='奥特曼' function getName () (console.log ) ) uname ); //奥特曼(} getName ) (console.log ) ) uname; //奥特曼无论在函数中还是在函数外都可以访问uname变量

总结:在函数外面定义的变量,在页面的任何地方都可以访问

二、函数作用域为es5,只有全局作用域和函数作用域

function getName () { let uname='奥特曼' varage='20'console.log ); console.log(uname; //奥特曼(} getName ) (console.log ) ) age; //ageisnotdefinedconsole.log (uname ); //uname is not defined注意事项全局输出时,age和uanem将分别输出。 这是因为,如果在执行过程中前面的代码报告错误,则会阻止后面的代码继续执行

当前的uname和age在函数内部定义,uname和age是局部变量,只能在函数内部访问(函数嵌套、父级访问符除外)。

为什么不能全局访问函数内部定义的变量呢? 调用getName时,函数将打开新的作用域空间,执行函数后,函数将关闭该作用域,并丢弃变量

3358www.Sina.com/es6中添加了块级作用域。 用{ }括起来的代码是块级作用域。 包含{ }、if和for的函数

if(true ) { let uname='奥特曼' varage='20'console.log ) age; //20console.log(uname ); //奥特曼}console.log(age ); //20console.log(uname ); //uname is not defined也同样发现了在{ }中定义的变量。 在let中声明的变量在{ }外部同样无法访问,但在var中声明的变量可以访问。 去断点看看吧

let中定义的变量位于块块中,而var声明的变量位于全局位置,因此var可以通过块级作用域进行访问

三、块级作用域(block)

查了资料看到MDN说

个人理解就是var定义的变量 不管在哪定义的,都会放到window下 所以用的都是同一个作用域。

在let和const中定义的变量具有块级范围,只能通过当前块范围进行访问

接下来看let中在{ }定义的变量

总结访问变量的区别

var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。

let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

总结完之后再来看看为什么es6会增加块级作用域呢,知道概念不行,更要知道原理哦

//es5 var uname='奥特曼' functionfn({console.log ) ) uname ); //undefinedif(false ) { var uname='怪兽' }fn )//es6 var uname='奥特曼' function fn ' ) console.log ) uname ); //奥特曼if(false ) { let uname='怪兽' }fn )的结果是,在var中声明的变量会由于变量的上升而复盖上述声明,但let现在生成块范围

1. 内层变量覆盖外层变量

for(varI=0; i 10; I({console.log ) ) I; }console.log(I; //10for(letj=0; j 10; j({console.log ) ) j; }console.log(j; //j is not defined

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。