摘要:最早由在年的語言中提出。該求值策略被用于等多種語言。該策略的重點是調用函數傳參時,函數接受對象實參引用的副本既不是按值傳遞的對象副本,也不是按引用傳遞的隱式引用。它和按引用傳遞的不同在于在共享傳遞中對函數形參的賦值,不會影響實參的值。
周五晚上下班回家的路上,突然想到了 CommonJS 規范、Node.js 模塊化等等各種東西,然后就想到了熟悉的 module.exports。
大約很久之前看 seajs 的文檔,文檔強調,exports = {/**/} 這種寫法是錯誤的!當時還是小白中的小白,只能一臉懵逼,為嘛不能啊?完全無法理解。
請看截圖:
有沒有看到最后的提示?可惜那時候的小白文藺完全不知道這是什么鬼——更可能的是那會兒就沒關注到這一塊兒,畢竟新人,心浮氣躁,就想五分鐘學會 seajs 模塊化開發。
后來摸爬滾打,js 知識相對扎實之后(鳴謝厚厚的紅寶書《 JavaScript 高級程序設計》,前后讀了三遍),我還是好歹懂了,但未能舉一反三。
昨天晚上,再次冒出這個問題,還是了然的。
子曰: 學而不思則罔,思而不學則殆。
很顯然,exports 在 define(function(require, exports) {})中就是個局部變量,它對應的值是個對象,是 module.exports 的一個引用。
然后呢,一句exports = {/**/}就把這個局部變量指向另外一個值了。這是局部變量啊喂。卒。
很多新人看了一些博客或者書之后,腦子里也打結了,求值策略,按值傳遞,按引用傳遞,這些似是而非的概念最后都把人給整糊涂了。
剛剛刷SF,讀到一篇文章,《JS中的值是按值傳遞,還是按引用傳遞呢?》,和我思考的有點類似。
然后搜索了下 “求值策略”,找到湯姆大叔的一篇文章,上文與大叔的這篇文章還挺類似的,但大叔的可能顯得更深入一點。
下面是引用:
準確的說,JS中的基本類型按值傳遞,對象類型按共享傳遞的(call by sharing,也叫按對象傳遞、按對象共享傳遞)。最早由Barbara Liskov. 在1974年的GLU語言中提出。該求值策略被用于Python、Java、Ruby、JS等多種語言。
該策略的重點是:調用函數傳參時,函數接受對象實參引用的副本(既不是按值傳遞的對象副本,也不是按引用傳遞的隱式引用)。 它和按引用傳遞的不同在于:在共享傳遞中對函數形參的賦值,不會影響實參的值。
從科學的角度來說,對于概念什么的,可能還是挺有必要的。從實用角度來說,只要能正確理解,可能用自己的一套語言來描述也是可以的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79780.html
摘要:圖示如下而對于引用類型的復制可不是這樣這個復制只是將的引用賦值給,二者是屬于同一個引用,訪問的都是堆內存中的同一個對象,任何一個該引用的變量發生變化,會對其余使用該引用的變量也發生變化。 這兩天自己在寫代碼的時候,出現一個BUG,代碼如下: class Car { constructor(carId) { this.position =...
摘要:在中回調函數非常重要,它們幾乎無處不在。首先你得先明白一點函數也是對象想弄明白回調函數,首先的清楚地明白函數的規則。理解了函數也是對象,先不急聊回調函數,先看看下面代碼只寫變量名返回的將會是方法本身,以字符串的形式表現出來。 在javascript中回調函數非常重要,它們幾乎無處不在。像其他更加傳統的編程語言都有回調函數概念,但是非常奇怪的是,完完整整談論回調函數的在線教程比較少,倒是...
摘要:我稱之為輕量級函數式編程。序眾所周知,我是一個函數式編程迷。函數式編程有很多種定義。本書是你開啟函數式編程旅途的絕佳起點。事實上,已經有很多從頭到尾正確的方式介紹函數式編程的書了。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者 譯者團隊(排名不分先后):阿希、blueken、brucecham、...
摘要:也就是說當返回的函數作為構造函數的時候,時指定的值會失效,但傳入的參數依然生效。構造函數效果的優化實現但是在這個寫法中,我們直接將,我們直接修改的時候,也會直接修改函數的。 JavaScript深入系列第十一篇,通過bind函數的模擬實現,帶大家真正了解bind的特性 bind 一句話介紹 bind: bind() 方法會創建一個新函數。當這個新函數被調用時,bind() 的第一個參數...
閱讀 664·2021-11-15 11:39
閱讀 2901·2021-10-08 10:04
閱讀 3265·2019-08-30 10:57
閱讀 3026·2019-08-26 13:25
閱讀 1908·2019-08-26 12:14
閱讀 2637·2019-08-23 15:27
閱讀 2996·2019-08-23 15:18
閱讀 1778·2019-08-23 14:26