立即执行函数与let
来源:互联网 发布:如何调用数组方法 编辑:程序博客网 时间:2024/06/06 02:25
在javascript中没有私有作用域的概念,其实现在的es6中的let声明就是为了解决这样的问题。但是在国内大部分公司的面试官还是喜欢去问一下var声明的问题或立即执行函数的问题。
1.js查找变量遵循由内而外,一层一层的查找,查到就不再向上查找了,直到查不到返回undefined;
什么是私有作用域呢,如下例:
var a = 100;if(a>10000){ var b = 200;}console.log(b);//200b居然输出为200,就是这样不合理,我想要表达的是b在自己的大括号内可以使用,出了这个大括号别人都看不到。
因此es6提出了let,就解决了私有作用域这个问题。
有其中两点:
var声明的b,即使if条件为false,b这个变量也是被占上坑了,所以后面只会输出undefined,而不会报错;
let声明的b,无论if条件true还是false,b只在自己的大括号内生效,出个这个大括号,没人知道,所以输出b的这一行永远报错。
以上let的效果,永远可以像这样模拟
var a = 100;if(a>10000){ (function() { var b=200; })()}console.log(b);
立即执行函数实现了块级作用域的感觉,感觉像一个容器,其内部声明的变量永远外部无法得知,但是其内部可以访问外部声明的变量。所以内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。
变态的面试题:
var name(function() { //这里name是一个特殊的变量 if(name === undefined){ console.log('hello world') }else { console.log('hello js') }})()
执行结果:hello js
因为name是window对象默认的一个属性(用来实现跨域),再次声明默认值是一个空字符串,所以name不等于undefined。
阅读全文
1 0
- 立即执行函数与let
- 匿名函数与立即执行函数
- js立即执行函数: (function ( ){})( ) 与 (function ( ){}( ))
- JavaScript立即执行函数
- js立即执行函数
- JS-立即执行函数
- JS立即执行函数
- js立即执行函数
- Javascript立即执行函数
- js 立即执行函数
- javaScript立即执行函数
- js立即执行函数
- 立即执行函数
- js立即执行函数
- js立即执行函数
- 立即执行函数
- 立即执行函数IIFE
- JS立即执行函数
- 计算机网络:网络层与IP协议
- 近几年ICCV,CVPR,和ECCV论文列表[转载]
- spring boot和mybatis集成分页插件
- maven关于ssm的整合
- adb.exe 已停止工作 解决
- 立即执行函数与let
- c++函数传值方式
- 区块链探索之漫画解说
- 读取本地文件上传到数据库
- 完美解决linux下jdk版本与安装版本不一致
- 中国AR行业专题研究报告
- 在datadir外创建InnoDB表
- Java-Java I/O流解读之基于字节的I / O和字节流
- linux cd pwd 命令