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