在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ javascript面試題

javascript面試題

function foo(a){
    a = a * 10;
}
function bar(b){
    b.value = 'new';
}
var a = 1;
var b = {value: 'old'};
foo(a);
bar(b);
console.log(a); //1
console.log(b);
function foo(){
    a = a * 10;
}
function bar(b){
    b.value = 'new';
}
var a = 1;
var b = {value: 'old'};
foo(a);
bar(b);
console.log(a); // 10
console.log(b);

為什么兩道題的結(jié)果不一樣

回答
編輯回答
心癌

上面的方法設(shè)有形參變量,方法內(nèi)部的代碼執(zhí)行操作的是這個(gè)形參。而下面的方法,沒(méi)有設(shè)形參,也沒(méi)有var一個(gè)a,所以在函數(shù)內(nèi)部操作a的時(shí)候會(huì)從當(dāng)前方法的上一作用域找這個(gè)a,然后就找window下的a了,之后的操作都是對(duì)全局下的a進(jìn)行的操作,所以?xún)纱蔚慕Y(jié)果不一樣。

2017年4月11日 07:48
編輯回答
薄荷綠

區(qū)別在于:foo 函數(shù)有沒(méi)有定義行參。

foo 函數(shù)沒(méi)有接收參數(shù),操作的是全局變量a, 打印出來(lái)的也是全局變量a.
foo 函數(shù)接收參數(shù),由于a 是基本數(shù)據(jù)類(lèi)型,直接把本身傳入函數(shù),并且存在函數(shù)作用域,函數(shù)內(nèi)部a,跟外面的全局變量a就沒(méi)關(guān)系了,函數(shù)內(nèi)部的a 屬于函數(shù)上下文中的變量對(duì)象,外部的a 屬于全局上下文中的變量對(duì)象。

2017年6月3日 14:48
編輯回答
忘了我

因?yàn)榈谝欢未a相當(dāng)于:

function foo(c){
    c = c * 10;
}
function bar(b){
    b.value = 'new';
}
var a = 1;
var b = {value: 'old'};
foo(a);
bar(b);
console.log(a); //1
console.log(b);
2017年4月18日 06:37
編輯回答
熊出沒(méi)

此參數(shù)的a非彼定義的a。

2017年8月11日 19:31
編輯回答
瘋浪

這個(gè)坑其實(shí)不大的,第一個(gè)因?yàn)槎x的是foo(a),所以運(yùn)行中a=a*10的a是局部變量,因?yàn)檫@個(gè)值沒(méi)有返回,所以全局的a并沒(méi)有變。而第二個(gè)是foo(),直接操作的全局變量,注意這個(gè)時(shí)候的foo(a)其實(shí)等效于foo(),傳參沒(méi)有被接收的,還是直接全局變量。

2017年1月14日 17:25
編輯回答
墨小白

首先a是一個(gè)基本數(shù)據(jù)類(lèi)型的值,因此以參數(shù)的形式傳入a時(shí),就相當(dāng)于把a(bǔ)的值拷貝了一份,賦值給foo函數(shù)體內(nèi)的局部變量a,因此在函數(shù)體內(nèi)對(duì)局部變量的操作,不會(huì)影響到外部的全局變量a。

var a = 1;
var b = a;        // 把a(bǔ)的值拷貝給b,就相當(dāng)于把a(bǔ)的值拷貝一份給函數(shù)參數(shù)中的a
b = 2;            // 重新給b賦值,就相當(dāng)于在函數(shù)體內(nèi)重新對(duì)參數(shù)a賦值
console.log(a)    // 1

這道面試題考查的是函數(shù)傳值和傳引用的區(qū)別,我之前也遇到過(guò),在給你舉一個(gè)傳引用的例子吧

var number = new Number(2);

function test(number) {
  number.value = 3;         // 為number對(duì)象添加了value屬性
}    

test(number)
console.log(number)        Number {2, value: 3}

這里number是一個(gè)對(duì)象,屬于引用類(lèi)型,因此以參數(shù)的形式傳入number時(shí),實(shí)際上傳入的只是number的地址,在函數(shù)體內(nèi)任何對(duì)number的操作都會(huì)反映到number對(duì)象上

最后給你一點(diǎn)小小的建議,一定要多看看書(shū),很多東西只有看書(shū)才能理解透徹,推薦幾本我現(xiàn)在在看的書(shū)《javascript高級(jí)教程》《javascript語(yǔ)言精粹》《javascript忍者秘籍》

2017年12月10日 01:08