下面运行结果是什么?
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();
前面2个相信大家也许可以答对,
但是这个呢?
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
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