- 模仿块级作用域
- 私有变量
js没有块级作用域,只有全局作用域和局部作用域(函数作用域),块级作用域是指某一部分代码执行完之后里面的变量就会被销毁,里面的变量不会被其他地方引用,但是js不同,例如:
function output () {
for (var i = 0; i<10;i++) {
console.log(i)
}
var i
console.log(i)
var i = 2
console.log(i)
}
如果js是块级作用域那么循环完就无法打印i,因为已经被销毁了,所以js没有块级作用域。上面第二个i为10,第三个i为2,为什么会不一样,因为js从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不见,不过,如果声明之后初始化了就会改变原有的值。
函数声明后面不能跟一对圆括号,表达式可以,例:
function () {
return 1
}() // 报错
(function () {
return 1
})()
第一种会报错,因为js将function关键字当做一个函数声明的开始,而函数声明后面不能跟圆括号。
js模仿块级作用域(私有作用域),如下
function output () {
(function () {
for (var i = 0; i<10;i++) {
console.log(i)
}
})()
console.log(i)
}
第一个会打印出i,但是第二个打印不出来而且会报错,因为匿名函数执行完就会被销毁。在一个由很多开发人员共同参与的大型应用程序中,过多的全局变量和函数很容易导致命名冲突,而通过创建私有作用域,每个开发人员既可以使用自己的变量,又不必搞乱全局作用域。
私有变量
js中私有变量就是函数的参数、局部变量和函数内部定义的其他函数。我们把有权访问私有变量和私有函数的共有方法称为特权方法。
网友评论