参考: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
b = 7
c = undefined
d = 3
d = 3
d = 3
后面三个d=3结果比较意外吧。
2、
引用
//i = 0
//i = 1
//i = 2
//i = 3
//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
};
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 defined
bar = 1
car = 1
ReferenceError: dar is not defined
10、这个是实现重载的一种方式。
引用
fn.length = 2
fn.length = 1
fn.length = 0
in find()
fn.length = 1
fn.length = 0
in find()