首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

经典论坛的javascript小小考试题

2012-11-22 
经典论坛的javascript小小考题var f new foo() f.abc()// alert(xyz)foo.abc()// alert(def)ab

经典论坛的javascript小小考题

var f = new foo(); f.abc();  // alert('xyz');foo.abc();  // alert('def');abc();  // alert('@@@@@');


结果在 firefox 中测试发现最后一句 abc() 是错误的
仔细一想才恍然,原来在一个函数中,会预先给 var 关键字定义的局部变量“分配空间”,所以一进入 foo 函数体的时候 abc 已经视为一个局部变量,虽然 abc = function(){alert('@@@@@')}; 这行看起来像是定义了一个全局变量,但它还是局部变量。所以在函数体外调用 abc() 理所当然的失败

呵呵,这样的题目挺有意思 3 楼 songlipeng 2008-11-18   看早就看过这个题目,一直都不知道为什么啊!可以解释一下吗? 4 楼 songlipeng 2008-11-18   foo.prototype.abc = function(){alert('456');}
foo.abc = function(){alert('123');}
为什么不会覆盖foo里面的方法啊!

abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
这两句,我明白,不用考虑 5 楼 大猫汤姆 2008-11-18   如此不规范的脚本语言,鄙视 6 楼 tidus 2008-11-21   var f = new foo(); //新建了一个foo对象,注意这时个上下文环境到了foo()中
f.abc();      //查找这个对象的abc()方法,输出xyz, 注意如果找不到就会去f.prototype里找,到那时才会输出456
foo.abc();              //在foo()中找到abc()方法,输出def, 如果找不到会跳出foo() 到外面找到abc ,输出123
abc();                    //在window中找到abc()方法, ie抛错 7 楼 songlipeng 2008-12-01   tidus 写道var f = new foo(); //新建了一个foo对象,注意这时个上下文环境到了foo()中
f.abc();      //查找这个对象的abc()方法,输出xyz, 注意如果找不到就会去f.prototype里找,到那时才会输出456
foo.abc();              //在foo()中找到abc()方法,输出def, 如果找不到会跳出foo() 到外面找到abc ,输出123
abc();                    //在window中找到abc()方法, ie抛错


我不知道我这样理解可以不
abc = function(){alert('@@@@@')}; 
var abc = function(){alert('$$$$$$')} 
是内部声明,外部不可以访问

对foo来说内部的高于外部的

所以先考虑
foo.abc = function(){alert('def')} 
this.abc = function(){alert('xyz')} 

然后考虑
foo.prototype.abc = function(){alert('456');} 
foo.abc = function(){alert('123');} 




8 楼 czwlucky 2008-12-01   tidus 写道
foo.abc();              //在foo()中找到abc()方法,输出def, 如果找不到会跳出foo() 到外面找到abc ,输出123


我认为是因为在执行new foo() 时对foo.abc进行了重写导致的输出def,如果没有这一句,那么在foo(){}后面写的那句话就能起作用。

热点排行