下面运行结果是什么?
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