(
function(){
console.log('hi')
}()
)
[1,2,3].map(item=> console.log(item))
上面这段代码会报错,因为前面函数返回值为undefined,所以被理解成undefined[3].map(item=> console.log(item)),所以应该写成:
(
function(){
console.log('hi')
}()
);
[1,2,3].map(item=> console.log(item))
此外 ~/!/+/-/等都可以,用new会消耗内存
提问: 如何声明一个局部变量a,并打印这个a(不准用ES6)
!function (){
var a
}()
用ES6
{
let a
}
关于面试:
是什么:
声明一个匿名函数,然后立即执行它。这种做法就是立即执行函数
怎么做:
(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来
(function(){alert('我是匿名函数')}) () // 用括号把函数包起来
!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法
+function(){alert('我是匿名函数')}()
-function(){alert('我是匿名函数')}()
~function(){alert('我是匿名函数')}()
void function(){alert('我是匿名函数')}()
new function(){alert('我是匿名函数')}()
var x = function(){return '我是匿名函数'}()
解决了什么问题:
在ES6之前,只能通过它来创建[局部作用域]
优点:
兼容性好
缺点:
丑
怎么解决缺点:
使用ES6的block+let语法,即
{
let a = '我是局部变量'
console.log(a) //能读取到a
}
console.log(a) //找不到a