块级作用域
(function(){
//这里是块级作用域
})()
例如:
(function(){
for(var
i=0i<5i++){
alert(i)//0,1,2,3,4
}
})()
alert(i)//error
上例中,定义了一个块级作用域,变量i在块级作用域中可见的,但是在块级作用域外部则无法访问。
这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。
私有变量
任何在函数中定义的变量,都可以认为是私有变量。因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。
我们把有权访问私有变量和私有函数的公有方法称为特权方法:
function
MyObject(){
//私有变量和私有函数
var
privateVariable
=
10
function
privateFunction(){
return
false
}
//特权方法,特权方法作为闭包有权访问在构造函数中定义的所有变量和函数
this.publicMethod
=
function
(){
privateVariable++
return
privateFunction()
}
}
var
obj
=
new
MyObject()
obj.publicMethod()//
原型模式定义共有方法:
(function(){
//私有变量和私有函数
var
privateVariable
=
10
function
privateFunction(){
return
false
}
//构造函数
MyObject
=
function(){
}
//公有/特权方法
MyObject.prototype.publicMethod
=
function(){
privateVariable++
return
privateFunction()
}
})()
模块模式:
var
singleton
=
function(){
//私有变量和私有函数
var
privateVariable
=
10
function
privateFunction(){
return
false
}
//特权/公有方法和属性
return
{
publicProperty:
true,
publicMethod
:
function(){
privateVariable++
return
privateFunction()
}
}
}()
更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
您可能感兴趣的文章:详解JavaScript
新语法之Class
的私有属性与私有方法JavaScript私有变量实例详解浅谈js继承的实现及公有、私有、静态方法的书写深入了解JavaScript
私有化
js能划分作用域的只有function,块级作用域指的是定义在条件或循环分支中的,像你举的这个函数例子,test定义在for循环之内,再for循环之外也能访问what变量 (这是js的变量提升,可以查一下,它会把what提升到test函数的最开头定义)function test(){for(var i=0i<3i++){
var what = "haha"
} console.log(what)
}
test()
如果你这段代码换成Java的,是下面这样的:private void test(){
for(int i=0i<3i++){
String what =“123"
}
System.out.println(what)
❵
这个方法是编译不通过的,因为what的作用域只在for循环之内,为块级作用域。