立即执行函数
分类:javascript
今天面试遇到的比较有意思的面试题,做个简单的记录:
1.立即执行函数
(function () {
var a = b = 5;
})();
console.log(a);
console.log(b);
如果交换打印顺序
(function () {
var a = b = 5;
})();
console.log(b);
console.log(a);
将以上demo做一个修改:
(function () {
var a = b = 5;
console.log('inner a=',a)
console.log('inner b=',b)
})();
console.log('outer b=',b);
console.log('outer a=',a);
分析原因是:
- 因为b没有被var,那么,它就变成了全局的window下的b=5
- var a是限定在了当前的环境中,所以,外部访问就是就undifined了。
2.隐式类型转换
var a = {} + []
var b = [] + {}
console.log(a)
console.log(b)
js在进行不同数据类型的"+"的操作的时候,会进行类型的转换,会使用toString或者隐式的valueof获取到一个值,其中valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中,而toString可以直接进行显式的进行调用。
以上例子中,js在计算的时候,等价于调用以下的代码
var a = ({}).toString() + ([]).toString()
var b = ([]).toString() + ({}).toString()
如果在chrome控制台直接进行{} + [] 或者[] + {},那么,可以等价于以下代码
{'这里相当于一个空的代码块,默认返回值是空字符串'} + ([]).toString()
([]).toString() + ({}).toString()