在這端**執行的末尾,你會不會hi變數回事函式中的hi了?你會不會認為這不是按引用傳遞了? 對值傳遞和引用傳遞產生質疑了?
1 var hi = {};
2 function sayhello(hi)
hi = ;
console.log(yongshiyule178.com'in function hi : ' + hi.a);
alert(hi.a);
}sayhello(hi);
console.log(www.mcyllpt.com 'out function: ' + hi.a); // 此時函式外的hi還是{}
辨析:1 是實參hi
2 是形參hi
雖然名字同名但同名不是同乙個變數,是兩個不同的變數,雖然同名同名,但存放的記憶體位置不同。
同名會迷惑你。
實參hi是乙個物件,在sayhello被呼叫時,會將引用賦值給形參hi,在函式內部我們將乙個新物件賦值給形參hi,這時形參hi的引用發生了變化,指向了新的物件,但實參hi的引用並沒有發生變化,所以函式呼叫後實參hi還是那個實參hi,這個函式值傳遞形式還是按引用傳遞,只不過我們在函式內部改變了形參hi的引用指向。如果不改變引用指向,可以在函式中修改實參hi的屬性值。
不要被表象所迷惑。
這個問題是我在閱讀seajs的原始碼發現的困惑,為什麼這樣寫,在另乙個模組中require是不能獲取到暴露出的物件:
seajsutil.js
define(function (require, exports, module) ;
});seajsdemo.js
define(function (require, exports, module) );
理解了以上的困惑,就告訴我們正確的暴露物件的方法是:
// 這樣才是使用exports暴露變數和屬性的正確姿勢,exports本身是乙個空物件{},要在空物件上進行新增屬性和函式
define(function (require, exports, module)
});// 直接return物件或者屬性,這樣就迴避了exports屬性暴露,使用return直接暴露,使用return可以暴露各種型別的值。
// 是的適合,使用起來感覺比exports更便捷。暴露模組內容的方法可以是情況進行選擇。
define(function (require, exports, module) ;
});//這是seajs的暴露模組屬性的**:
/*** 如果建構函式factory不返回,則exports取mod.exports變數作為返回物件。也即是seajs模組的的互動,控制代碼持有的對
* 象,要麼是factory的return物件,要麼是exports對外發布的物件。
* factory被賦予的exports是乙個物件,所以通過exports暴露的就是乙個物件。
*/var exports = isfunction(factory) ?
factory(require, mod.exports = {}, mod) :
factory
if (exports === undefined)
// reduce memory leak
delete mod.factory
mod.exports = exports
mod.status = status.executed
// emit `exec` event
emit("exec", mod)
return exports
/*** require返回mod.exports,供其他模組接收使用.
* require返回的exports變數,模組要給exports變數賦值
*/seajs.require = function (id)
return mod.exports
ucos容易錯誤的地方
1 在ucos中斷中,如果沒有呼叫作業系統的服務函式 如傳送訊號量等 則在中斷中,不需要要呼叫才做系統的 進入中斷 函式osintenter 和 退出中斷 函式osintexit 見周航慈的p125和p75頁。2 關於互斥訊號量得核心,是在使用呼哧訊號量進行資源同步的時候,任何任務一旦獲得共享資源,...
hadoop資料容易出現錯誤的地方
最近在搞關於資料分析的專案,做了一點總結。下圖是系統的資料流向。容易出現錯誤的地方。1 資料進入hadoop倉庫 有四種 這四種是最基本的資料,簡稱ods,original data source,後續 的資料都是有這些組合而來 a 日誌檔案 b http介面 c db查詢 d 建表指向 最後資料都...
AJAX容易出錯地方,錯誤處理
myajax.js 建立路由器物件 const express require express 引入連線池模組 const pool require pool.js 建立路由器物件 var router express.router 測試伺服器接收ajax請求的介面 router.get ajaxd...