js变量提升,scope作用域
来源:互联网 发布:log4j数据存进mongodb 编辑:程序博客网 时间:2024/05/01 23:20
之所以想起再来温习一遍js的作用域,及js变量解析方式,是因为今天的公司下面的这道题,很显示我挂掉了。好逮也是老前端了 ,不称职。
上代码
//6. What will be written to the console for the following code snippet?(function () { var a = [1]; function bar() { if (!a) { var a = [1, 2]; } console.log(a.join()); } bar();})()
我直接给了一个1,结果可想而知,看正确的答案
[1,2]
在js中,变量的声明会被解析器悄悄的提升到方法体的最顶部,但是需要注意的是,提升的仅仅是变量的声明,变量的赋值并不会被提升。
怎么理解???比如上面的bar函数虽然var a=[1,2]在if判断中并没有运行,但是js在解析时会先将var a=[1,2]在bar的顶部先进行申明也就是提升,看如下面的代码,忘提 了关键的是他不会提升变量的值。也就是说a在此时始终是undefinded,也就是仅仅只是申明确没有赋值;
//js实际解析是这样的function bar() { var a; if (!a) { console.log(a); //undefinded 测试a的值 a = [1, 2]; } console.log(a.join()); //[1,2]}
是不是有种错觉,函数内部访问不到全局变量了。肯定不是。只是因为javascript解析关系.a被重新覆盖了.
0 0
- js变量提升,scope作用域
- js变量作用域--变量提升
- JS-作用域与变量声明提升
- js作用域Scope
- JavaScript变量作用域和变量提升解释(JavaScript Variable Scope and Hoisting Explained)
- JavaScript变量作用域和变量提升解释(JavaScript Variable Scope and Hoisting Explained)
- java变量作用域Scope
- java变量作用域Scope
- JavaScript 中的执行环境、作用域(scope)以及变量提升(hoisting)
- js变量声明提升,变量作用域与函数作用域,作用域链
- angular js $scope 作用域
- JS中的作用域(scope)
- js学习,变量提升(hositing)与作用域(Scoping)浅析
- 深入学习js之浅谈作用域(变量提升)
- JS 函数作用域及变量提升那些事!
- JavaScript 变量提升 作用域
- 作用域 变量的提升
- jstl变量作用域控制 scope
- TensorFlow学习_02_CNN卷积神经网络_Mnist手写数字识别
- CentOS下架设ftp服务器
- 趣谈js中的原型(prototype)
- 页面自动弹出加qq对话框
- 点击跳转到页面指定位置
- js变量提升,scope作用域
- android AES-256-CBC加密
- Spring依赖注入properties,Map,List
- node安装遇到的问题。
- AndroidStudio代码达到指定字符长度时自动换行
- word使用技巧(wps)
- NTP配置实践
- 【小QのSpringBoot-翻译】Spring Boot官方参考指南-第一部分 Spring Boot文档
- 子查询作为数据源时是否需要表别名