js作用域详解
js的作用域
我们要明确最基本的一点:
(1)在函数外面无法访问函数内的局部变量.
?
console.clear(); function test() { var name2="whuang"; console.log("name:"+name2); } console.log(name2); test();
?运行时报错
?
?
解说:
变量name2是在方法test中定义的局部变量,所以在test方法外面是不可见的.
下面的代码是正确执行的:
?
var name2="whuang"; function test() { console.log("name:"+name2); } console.log(name2); test();
?
?
下面的代码会报错
?
console.clear(); function test() { function inTest() { var name3="whuang"; console.log("name:"+name3); } console.log(name3); } test();
?
?解说:name3是方法inTest里面的局部变量,所以在inTest方法外面是无法访问的.
?
?
?
?
?
(2)函数内部可以访问函数外面定义的局部变量
?
function test() { var name3="whuang"; function inTest() { console.log("name:"+name3); } inTest(); } test();
?运行结果:
?
?
解说:在inTest方法内部可以访问inTest方法外面定义的局部变量.
?
(3)js的私有成员变量
通过以上两点,我们可以实现js中的私有成员变量
?
function Person() { this.username="whuang"; var sex=‘man‘; this.getSex=function() { return sex; } this.setSex=function(sex2) { sex=sex2; } } var person2=new Person(); console.log("username:"+person2.username); person2.username="mudan"; console.info("username:"+person2.username); console.info("sex:"+person2.sex);
?运行结果:
?
解说:通过对象person2.sex无法访问到sex,因为sex不是Person的成员变量.
但是可以通过getSex方法和setSex方法访问
?
?
范例
?
function Person(name){ this.getName=function(){ return name; }; this.setName=function(value){ name=value; }; } var person=new Person("zxj"); console.log(person.getName()); //zxj person.setName("Greg"); console.info(person.getName()); //Greg
?运行结果:
?
?
?
注意:
(1)在函数外面无法访问函数里面声明的局部变量(使用var声明的);
(2)初始化未经声明的变量,总会创建一个全局变量
(3)字面量:使用json格式创建单例对象.例如{name:"whuang"}
参考:http://www.cnblogs.com/zxj159/archive/2013/06/03/3115139.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。