五段小代码(JavaScript 的核心,闭包和作用域)
if (!("a" in window)) {
var a = 1;
}
alert(a);
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);
function a(x) {
return x * 2; }
var a;
alert(a);
function b(x, y, a) {
arguments[2] = 10;
alert(a); }
b(1, 2, 3);
function a() {
alert(this); }
a.call(null);
以上五段小代码是什么结果?为何是?
------解决方案--------------------1,先解析声明后运行,把a是最后为准 输出了 最后一个A函数
2,a赋值1了,输出1
3,var a; 只是声明,运行时略过,还是输出1
4,本来b值是以最后这个,但在2处赋值了新函数,
所以b = function a(x) { x && a(--x); } ,我们知道这时a=1,它调用a(--x),所以出错了
5。4出错了后面出没执行了
------解决方案--------------------楼主,你找不自在
------解决方案--------------------似乎见到过,好像有人贴过了
------解决方案--------------------http://bbs.csdn.net/topics/390300541
------解决方案--------------------if (!("a" in window)) {
var a = 1;
}
alert(a); // undefined
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a); //1
function a(x) {
return x * 2; }
var a;
alert(a); //function a(x) { return x * 2; }
function b(x, y, a) {
arguments[2] = 10;
alert(a); } //10
b(1, 2, 3);
function a() {
alert(this); } // [Object window]
a.call(null);
我只是实际测试了一下,爱解释的来解释吧
------解决方案--------------------见过
一:undefined
二:1
三:方法a
四:10
五:window
------解决方案--------------------不喜欢研究这种题。。。。。。
------解决方案--------------------第一个函数: a 一定是 window对象的属性之一,没有不是的可能,所以这里的条件是永远不成立的,顾a 的结果是undefined;
第二个函数:a 定义的是全局变量,b是赋值,他把一个函数赋值给b
第三个函数:变量a 虽然是后面var声明的变量,实际上相当于var a = function a(){};
第四个函数:函数体内部的变量执行优先级最高,顾a的值就是 10 ;
第五个函数:call方法是把另一个对象定义的方法,交给该对象来用,call的第一个参数是obj,