函数作用域
每声明一个函数都会为其自身创建一个作用域,属于这个函数的全部变量都可以在整个函数的范围内使用及复用。
最小特权原则:最小限度地暴露必要内容,而将其他内容都“隐藏”起来
模块化封装
减少全部变量使用,私有化函数方法和变量
inner函数和变量b都私有化到了fun函数内部,外部无法访问
function fun(a) {
function inner(a) {
return a - 1;
}
var b;
b = a + inner( a * 2 );
console.log( b * 3 );
}
fun( 2 ); // 15
避免同名标识符之间的冲突
函数bar内部的变量i被定位为foo作用域的全局变量,间接修改了定义for循环中的计数变量,导致死循环
function foo() {
function bar(a) {
i = 3; // 修改 for 循环所属作用域中的 i
console.log( a + i );
}
for (var i=0; i<10; i++) {
bar( i * 2 ); // 糟糕,无限循环了!
}
}
foo();
包装函数
( function foo(){
console.log(foo)//foo函数
})();
console.log(foo)//foo is not defined
函数表达式: var f1= function() {}
函数声明: function f2() {}
函数声明和函数表达式之间最重要的区别是它们的名称标识符将会绑定在何处
(function foo(){ .. }) 作为函数表达式意味着 foo 只能在 .. 所代表的位置中被访问,外部作用域则不行。 foo 变量名被隐藏在自身中意味着不会非必要地污染外部作用域。
匿名和具名
匿名函数表达式
function(){....}没有名称标识符
网友评论