立即执行函数

吐槽君 分类:javascript

今天面试遇到的比较有意思的面试题,做个简单的记录:

1.立即执行函数

(function () {
    var a = b = 5;
})();
console.log(a);
console.log(b);
 

image.png
如果交换打印顺序

(function () {
    var a = b = 5;
})();
console.log(b);
console.log(a);
 

image.png
将以上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);
 

image.png
分析原因是:

  • 因为b没有被var,那么,它就变成了全局的window下的b=5
  • var a是限定在了当前的环境中,所以,外部访问就是就undifined了。

2.隐式类型转换

var a = {} + []
var b = [] + {}
console.log(a)
console.log(b)
 

image.png
js在进行不同数据类型的"+"的操作的时候,会进行类型的转换,会使用toString或者隐式的valueof获取到一个值,其中valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中,而toString可以直接进行显式的进行调用。
以上例子中,js在计算的时候,等价于调用以下的代码

var a = ({}).toString() + ([]).toString()
var b = ([]).toString() + ({}).toString()
 

如果在chrome控制台直接进行{} + [] 或者[] + {},那么,可以等价于以下代码

{'这里相当于一个空的代码块,默认返回值是空字符串'} + ([]).toString()
([]).toString() + ({}).toString()
 

image.png

image.png

回复

我来回复
  • 暂无回复内容