1、乘积函数
代码
function mul(){
let {slice}=Array.prototype;
let argus=slice.call(arguments,0);
let returnFn=function(){
let arguArr=slice.call(arguments,0);
return mul.apply(null,arguArr.concat(argus))
}
returnFn.valueOf=function(){
return argus.reduce(function(total,item){
return total*item
})
}
returnFn.toString=null
return returnFn
}
alert(mul(3)(3,3)(4))
alert(mul(3,10,3))
2、一个表达式的结果
const result=++[[]][+[]]+[+[]];
console.log(result)//?
答案:‘10’
+[ ] => 0
[+[ ]] => [0]
[[]][0] => []
++[] => 1
1+[0] => ‘10’
3、函数声明和函数表达式
var foo = 1;
(function foo(){
foo = 100;
console.log(foo);
}())
console.log(foo);
答案:
解析:
var foo = 1;// 全局声明变量foo为1
// 创建IIFE立即执行函数表达式(创建一块的私有作用域空间)
(function foo(){ // 函数声明foo(局部声明),该名称可以在函数体内部被引用
foo = 100; // 对声明的函数名称不能重新赋值,严格模式下报错,非严格模式下不生效不报错
console.log(foo); // 因此在这里输出函数的定义
}())
console.log(foo);// 输出全局变量1
其中定义的函数foo外部的()的作用:js会对()内部的内容作为一个表达式立即执行。等价于:
+function(){}
~function(){}
-function(){}
!function(){}
(function foo(){})()