日期:2014-05-16  浏览次数:20601 次

javascript进阶1
参考:http://ejohn.org/apps/learn

答案在后面。
1、看下面的例子,能看得出输出什么?
var a = 5; 
function runMe(a){ 
 console.log("a = " + a);//a=?
 
 function innerRun(){ 
   console.log("b = " + b);//b=?
   console.log("c = " + c);//c=?
 } 
 
 var b = 7; 
 innerRun(); 
 var c = 8; 
} 
runMe(6); 
 
for ( var d = 0; d < 3; d++ ) { 
 setTimeout(function(){ 
   console.log("d = " + d);//d=?
 }, 100); 
}



2、下面代码输出是什么?
var count = 0;
for ( var i = 0; i < 4; i++ ) (function(i){
  setTimeout(function(){
    console.log(“i = ” + i);
  }, i * 200);
})(i);


3、看下面的代码,最后输出是什么?
function Ninja(){ 
  this.swingSword = function(){ 
    return true; 
  }; 
} 
  
Ninja.prototype.swingSword = function(){ 
  return false; 
};

var ninja = new Ninja(); 
console.log(ninja.swingSword());//false or true?



4、类的定义
先看下面的例子,能看得出有几个地方错误吗?
var a = {
 a :0,
'b' :1,
'a' : 2,
class : 2,
first-name :2
};


5、看代码
var obj = {name : 'iteye'};
console.log(obj.age);//输出什么
console.log(obj.age.val);//这里又输出什么


6、第三行的写法正确吗?
function Ninja(){}
var ninja = new Ninja();
var ninjaB = new ninja.constructor();//可以这样写吗


7、方法的length表示什么意思?
function makeNinja(name){} 
function makeSamurai(name, rank){} 
makeNinja.length//?
makeSamurai.length//?


8、
function ff(){
return 1;
}
function ff(x){
return 2;
}
function ff(x,y,z){
return 3;
}
console.log(ff(1));//输出?



9、基础的东西
var foo = 0;
var bar = 0
function ff(){
    this.foo = 1
    bar = 1;
    car = 1;
    var dar = 1;
}
ff();
console.log("foo = " + foo);
console.log("bar = " + bar);
console.log("car = " + car);
console.log("dar = " + dar);


10、最后压轴的:
function addMethod(object, name, fn){ 
  var old = object[ name ];  
  object[ name ] = function(){ 
    console.log("fn.length = " + fn.length);//输出?
    if ( fn.length == arguments.length ) 
      return fn.apply( this, arguments ); 
    else if ( typeof old === "function" ) 
      return old.apply( this, arguments ); 
  }; 
}

var a = {};
addMethod(a, "find", function(){
	console.log("in find()");
});

addMethod(a, "find", function(x){
	console.log("in find(x)");
});

addMethod(a, "find", function(x, y){
	console.log("in find(x, y)");
});

a.find();


答案:
1、运行结果
运行结果:
引用
a = 6
b = 7
c = undefined
d = 3
d = 3
d = 3

后面三个d=3结果比较意外吧。
2、
引用
//i = 0
//i = 1
//i = 2
//i = 3

3、
引用
true

类内定义的方法会覆盖prototype定义的方法。

4、有一个地方错误,第6行first-name因为有保留字减号所以需要用引号引起来。
引用
var a = {
a :0,
'b' :1,
'a' : 2,
class : 2,
'first-name' :2
};


5、第一次输出
引用
undefined

第二次就没有输出了,而是抛出错误
引用
TypeError: obj.age is undefined


6、这样写是正确的,等价于:
引用
var ninjB = new Ninja();


7、表示方法参数的个数。

8、输出为
引用
3

后面函数的定义会覆盖前面同名函数的定义,没有方法重载。

9、输出下面
引用
foo = 1
bar = 1
car = 1
ReferenceError: dar is not