js作用域详解
程序员文章站
2022-04-19 09:53:15
...
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);
运行结果:
username:whuang
username:mudan
sex:undefined
解说:通过对象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