一个js变量作用域的例子

下面运行结果是什么?

function ShowMessage(msg) {
this.mymessage = msg;
var alertMessage = function() {
alert(this.mymessage);

}
alertMessage();
}
var mymessage = new ShowMessage("Hello");

答案: undefined

改变代码

function ShowMessage(msg) {
this.mymessage = msg;
this.alertMessage = function() {
alert(this.mymessage);

}
this.alertMessage();
}
var mymessage = new ShowMessage("Hello");

答案: Hello

 

再看另外三个例子

JavaScript code1

var a = 10;
  function test() {
    a = 100;
    alert(a+'.1');
    alert(this.a+'.2');
    var a;
    alert(a+'.3');
  }
 test();
 

 

JavaScript code2
var tt = 'aa';
function test(){
alert(tt+'.4');
var tt = 'dd';
alert(tt+'.5');
}
test();

前面2个相信大家也许可以答对,
但是这个呢?

JavaScript code3
var a = 10;
  function test() {
    a = 100;
    alert(a+'.1');
    alert(this.a+'.2');
    var a;
    alert(a+'.3');
  }
 test();
//这里是分界线
 var a = 'aa';
function test(){
alert(a+'.4');
var a = 'dd';
alert(a+'.5');
}
test(); 
 
主要是作用域问题
var a = 10;
  function test() {
    a = 100;
    alert(a+'.1');
    alert(this.a+'.2');
    var a;
    alert(a+'.3');
  }
 test();
这儿只需记住同一片作用域里面a变量是同一个变量,一旦函数内定义了局部变量a,函数内所有a就都是这个局部变量a,函数内this为window,所以this.a会访问到全局变量a,故依次为100.1,10.2,100.3

 var a = 'aa';
function test(){
alert(a+'.4');
var a = 'dd';
alert(a+'.5');
}
test(); 

与上原理同,定义a后函数内的a都是同一个
第一处还未赋值,为undefined,应该是弹出undefined.4,第二处不用说dd.5
 
资料来源:http://bbs.csdn.net/topics/390380897
 

posted on 2013-02-28 14:10  小嘟  阅读(216)  评论(0)    收藏  举报

导航