Javascript中的函数表达式
函数声明 有提升 而函数表达式没有,因此不应该通过if…else来声明函数
if (condition) {
function sayHi() {}
} else {
function sayHi() {}
}
在递归函数中使用arguments.callee可以避免因函数名改变产生的错误。
function factorial(num) {
if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); }
}
闭包是指函数中定义的函数,闭包的作用域链中包含父函数的执行环境(变量对象),所以即使父函数退出,如果闭包仍然被引用,那么父函数的变量对象就一直存在于内存中。所以,过度的使用闭包会导致内存占用过多
闭包的另外一个副作用是闭包只能取得父函数中变量的最后一个值,例如:
function createFunctions() {var result = new Array(); for(var i = 0; i < 10; i++) { result\[i\] = function() { return i; } } return result;
}
调用result中的每个函数都会返回10闭包如果是匿名函数,则该函数中的this指向全局对象
可以用定义一个立即执行函数来模仿块级作用域:
(function(){
//块级作用域
})();
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 三木的技术博客!
评论