var a = 1;
function b()
}b();
console.log(a);
輸出: 1
解析:輸出的a是window下的
function foo()
return bar();
function bar()
}alert(foo());
輸出: 8
解析: 涉及預編譯問題,兩個方法名同名,
後宣告的覆蓋之前的所以這裡輸出8
function parent()
return hoisted();
}console.log(parent());
輸出: 「typeerror: hoisted is not a function」
解析:當變數名和函式名重名是,因為函式優先宣告,所以變數名覆蓋函式名,這裡hoisted = 「i』m a variable」,
alert(foo());
function foo() ;
return bar();
var bar = function() ;
}
輸出: 3
解析:預編譯中變數名宣告時賦值undefined,這裡是變數的值是函式,它不是乙個函式體,容易看錯
var myvar = 'foo';
(function() )();
輸出: 「original value was: undefined」, 「new value is: bar」
解析:第乙個輸出myvar為undefined:作用域中自身有宣告時不會向上層查詢,
本層有乙個提前宣告的myvar 賦值為undefined
console . log(to) //undefined
var to=1;
function fn(n1,n2)
fn(10,20)
console . log(to) //30
解析:
第乙個輸出:預編譯變數宣告提前
第二個輸出:作用域,輸出to為全域性變數的值
第三個輸出:作用域,輸出to為全域性變數的值修改n1+n2 = 30;
第四個輸出:全域性變數的值
function test(a,b)
function d()
console . log(b) //2
}test(1)
解析:預編譯的過程
function foo()
var obj1 = ;
var obj2 = ;
obj1.foo(); // 2
obj2.foo(); // 3
obj1.foo.call( obj2 ); // 3
obj2.foo.call( obj1 ); // 2
解析:改變this指向
var a = function( name );
var b = function();
b.prototype.getname = function();
var b=new b('sven');
console.log( b.getname() ); // 輸出: 'sven'
解析:原型鏈加改變this指向,
我們一步步看,輸出的是b.getname(),b是b new出來的 ,所以b繼承的是
b.prototype,那麼getname() 執行的函式應該就是 function();這個函式體,函式體return this.name;,那麼在原型鏈上尋找這個name,在變數a中發現這個name,我們還發現b的值函式體裡面a改變了形參,
所以輸出的應該是 『sven』
//建構函式
function foo(name,age)
foo.prototype.alertname= function()
//建立示例
var f = new foo("l");
f.lastname = function()
f.lastname(); //"l",自身屬性
f.alertname(); //"lkillua",原型屬性
以上函式中,f共有3個屬性,f自身的屬性有2個(name屬性和lastname屬性),還有乙個alertname是原型屬性
f.firstname();
//這裡f自身屬性中沒有firstname屬性,它的原型foo函式中也麼有這個屬性,所以要再往上一層foo的原型上去找這個屬性,這種有多層原型的函式就是原型鏈,直到null為止結束原型鏈
函式面試題
面試題的理解文件 第一題 var num function fun num 18 fun 理解 結果是undefined,但是num的值為18,函式裡面的num的值為20,這串 是由上到下的循序執行的,而這裡的num如果在函式裡面則會去找自己裡面的,如果有則會使用自己裡面的num,如果沒有則會去父級...
虛函式面試題
classa classb int tmain intargc,tchar argv 情況a 不是虛函式 輸出hello world,程式執行正常 情況b 有虛函式 程式直接crash 原因是 不是虛函式的情況,this指標當成第乙個引數傳入函式 一般是通過ecx暫存器 主要裡面沒有使用這個this...
js函式面試題
一var name the window var object alert object.getnamefunc 題中有兩個alert輸出,我們首先看第乙個alert,這個alert所在的函式是在最後乙個alert裡面被呼叫的,呼叫的時候,裡面的this指向的是object,所以是在object裡面...