国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Fragen zum Aufrufen von Methoden in Javascript
我想大聲告訴你
我想大聲告訴你 2017-05-19 10:34:27
0
5
690
window.onload=init;
function init(){
    var takeNoteButton=document.getElementById("take-note");
    takeNoteButton.onclick=createNote;
}
function createNote(e){
    //dosomething
}

各位大神好,這段代碼中對(duì)createNote函數(shù)的調(diào)用:
     takeNoteButton.onclick=createNote;
而實(shí)際的createNote(e)有個(gè)參數(shù),這樣也能調(diào)么??!
我想大聲告訴你
我想大聲告訴你

Antworte allen(5)
洪濤

其實(shí)這段代碼對(duì)函數(shù)的調(diào)用并不是這句

takeNoteButton.onclick = createNote;

留意一下日常寫(xiě)的代碼,我們對(duì)函數(shù)的調(diào)用不都是 xxxxx(),xxx.xxx()或者xxx.call()等類(lèi)似這樣的形式嗎?
而這句代碼你可以理解為一個(gè)賦值語(yǔ)句,takeNoteButton 的 onclick 屬性賦值為 createNote 這個(gè)函數(shù)名,實(shí)際引用指向下面聲明的具體函數(shù)。

這樣,瀏覽器在監(jiān)聽(tīng)到takeNoteButton的點(diǎn)擊事件發(fā)生的時(shí)候,你可以想象成,實(shí)際上就進(jìn)行了takeNoteButton.onclick(event)這樣的函數(shù)調(diào)用。

下面說(shuō)下參數(shù),函數(shù)調(diào)用傳入的實(shí)參和函數(shù)聲明的形參實(shí)際上是分開(kāi)的,并不需要對(duì)應(yīng)起來(lái),并且聲明時(shí)指定的參數(shù)不一定要傳入(會(huì)作為undefined處理),調(diào)用時(shí)實(shí)際傳入的參數(shù),如果在聲明的函數(shù)體內(nèi)并沒(méi)有用到,那也完全沒(méi)有問(wèn)題。

比如這個(gè)事件點(diǎn)擊時(shí)調(diào)用的函數(shù),它是由瀏覽器底層自己進(jìn)行調(diào)用,并傳入了事件對(duì)象作為實(shí)參。那么反推過(guò)來(lái),我們?cè)趯?xiě)具體的函數(shù)體的時(shí)候,可以用一個(gè)event也好,e也好,abc也好,隨便一個(gè)符合規(guī)范的名字作為形參來(lái)取得實(shí)際傳入的實(shí)參,當(dāng)然也可以不用形參,用arguments這個(gè)類(lèi)數(shù)組對(duì)象也能訪(fǎng)問(wèn)到實(shí)際傳入的參數(shù),比如:

var a = 1;
fn(a);
// 可以這樣拿到a
function fn(param) {
    console.log(param);
}
// 也可以這樣拿到a
function fn() {
    console.log(arguments[0]);
}

其實(shí)這也為我們寫(xiě)一些組件插件提供了參數(shù)設(shè)計(jì)的思路,在組件內(nèi)部的函數(shù)調(diào)用上我們可以指定傳入的實(shí)參,而這個(gè)實(shí)參具體的值可以設(shè)計(jì)為一個(gè)暴露出去的參數(shù)讓外部傳入,舉個(gè)jQuery的簡(jiǎn)單栗子:

$.fn.plugin = function(option) {
    var defaultOp = {
        a : 'default a'
    };
    var options = $.extend(defaultOp, option || {});
    var fn = function(a){ console.log(a) };
    fn(options.a);
}

這段代碼可以通過(guò)$().plugin()調(diào)用,輸出默認(rèn)的default a
也可以用過(guò)$().plugin({a : '123'}) 這樣傳入指定的參數(shù),輸出123
而我們實(shí)際寫(xiě)的函數(shù),形參還是a,實(shí)際調(diào)用函數(shù)傳入的參數(shù)還是options.a,并且做了外部不傳入?yún)?shù)的默認(rèn)值的處理。

大家講道理

js中函數(shù)的調(diào)用跟行參個(gè)數(shù)沒(méi)有關(guān)系,js的函數(shù)參數(shù)是一個(gè)arguments的類(lèi)數(shù)組,就是如果你傳入一個(gè)參數(shù),對(duì)應(yīng)的就是arguments[0],兩個(gè)參數(shù)的話(huà)就是argument[0]和argument[1]。所以行參合實(shí)參的個(gè)數(shù)不一定要完全吻合的,函數(shù)底層會(huì)根據(jù)你傳入的參數(shù)個(gè)數(shù)來(lái)匹配的。

習(xí)慣沉默

當(dāng)然是可以的了,你可以理解onclick是個(gè)指針,指向createNote這個(gè)function,并不是真正調(diào)用它。調(diào)用這個(gè)onclick方法是瀏覽器來(lái)完成的,瀏覽器會(huì)傳入e這個(gè)參數(shù)。

可以理解下面的代碼:

var obj = {
    onclick: null
};

function test(msg) {
    console.log(msg);
}

obj.onclick = test;

// 當(dāng)點(diǎn)擊事件發(fā)生以后
if (obj.onclick && typeof obj.onclick === 'function') {
    obj.onclick("這是我傳進(jìn)去的參數(shù),相當(dāng)于e");
}
世界只因有你

在js中,形參和實(shí)參不一定要一一對(duì)應(yīng),事件監(jiān)聽(tīng)函數(shù)就相當(dāng)于一個(gè)回調(diào)函數(shù)。

當(dāng)事件發(fā)生時(shí),瀏覽器就會(huì)調(diào)用這個(gè)函數(shù)并把事件對(duì)象傳進(jìn)去。

世界只因有你

我覺(jué)得這個(gè)問(wèn)題有些缺陷 因?yàn)槟銌?wèn)函數(shù)可以調(diào)用嗎 ?當(dāng)然可以調(diào)用因?yàn)檫@個(gè)函數(shù)屬于window下一個(gè)變量 其實(shí)函數(shù)也是變量!只是比較特殊 形參有但不一定非要有實(shí)參 如果你傳入的實(shí)參比較特殊或者在在另外一個(gè)作用域下你要先獲得實(shí)參才能傳遞 否則你用這個(gè)參數(shù)的時(shí)候回報(bào)錯(cuò)

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage