最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js的函數的按值傳遞參數(實例講解)

 更新時間:2017年11月16日 10:07:30   作者:參與商  
下面小編就為大家分享一篇js的函數的按值傳遞參數的實例,具有很好的參考價值,一起跟隨小編過來看看吧,希望對大家有所幫助

js的函數傳參的方式是按值傳遞,正常情況下,改變函數參數的值,并不會對函數外部的變量造成影響。例如:

'use strict';
var list = [1, 2, 3];
list.forEach(function(item) {
 item ++;
});
console.log(list); // [ 1, 2, 3 ]

這是因為js的函數在接收參數時,會生成一個副本變量,該副本變量等于參數的值,可以分析js這樣運行的:

'use strict';
var list = [1, 2, 3];
list.forEach(function(item, i) {
 // 第一個item是副本,第二個item是數組元素list[i]
 var item = item;
 // 副本item++
 item ++;
 // 打印的是副本的值
 console.log(item); // 2, 3, 4
});
// 原數組不會改變
console.log(list); // [ 1, 2, 3 ]

但是當函數的參數傳遞的是一個對象呢?

'use strict';var list = [{a: 1, b: 2}];
list.forEach(function(item) {
 item.a ++;
});
console.log(list); // [ { a: 2, b: 2 } ]

發(fā)現函數內部居然改變了函數外部變量的值,那這又是為什么呢?

我們來分析js是如何運行這段代碼的

'use strict';
var list = [{a: 1, b: 2}];
list.forEach(function(item, i) {
 // 第一個item是副本,第二個item是數組元素list[i]
 var item = item;
 // 此時item和list[i]指向的是同一地址,故兩者完全一樣
 console.log(item === list[i]); // true
 // 此時item.a++ 亦即 list[i].a++
 item.a ++;
 // list[i]的值已經改變
 console.log(list[i]); // { a: 2, b: 2 }
});
console.log(list); // [ { a: 2, b: 2 } ]

那么為什么會產生這種情況呢?

由于js中對象屬于引用類型,var item = item 這一步相當于把 list[i] 的地址賦值給了item,他們兩個指向的都是原對象的地址,所以通過其中的一個去修改值時其實是修改他們指向的那個對象。例子中通過 item.a++ 方法改變了原對象的值,因此最后應該輸出 [ { a: 2, b: 2 } ]。

以上這篇js的函數的按值傳遞參數(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • layui富文本編輯器前端無法取值的解決方法

    layui富文本編輯器前端無法取值的解決方法

    今天小編就為大家分享一篇layui富文本編輯器前端無法取值的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript中關于iframe滾動條的去除和保留

    JavaScript中關于iframe滾動條的去除和保留

    在開發(fā)中經常遇到去掉全部的滾動條,去掉右邊的滾動條且保留底下的滾動條,去掉底下的滾動條且保留右邊的滾動條,大家基于js是怎么實現的呢?下面小編通過本文給大家詳細介紹下,對js iframe滾動條相關知識感興趣的朋友一起學習吧
    2016-11-11
  • JavaScript實現左側菜單效果

    JavaScript實現左側菜單效果

    這篇文章主要為大家詳細介紹了JavaScript實現左側菜單效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于打包工具Webpack進行項目開發(fā)實例

    基于打包工具Webpack進行項目開發(fā)實例

    這篇文章主要介紹了基于打包工具Webpack進行項目開發(fā)實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • uniapp小程序實戰(zhàn)之利用騰訊地圖獲取定位

    uniapp小程序實戰(zhàn)之利用騰訊地圖獲取定位

    使用uniapp是因為它是一個使用vue.js開發(fā)所有前端應用的框架,開發(fā)者編寫一套代碼,可以發(fā)布到ios,android,web以及各種小程序,快應用等多個平臺,下面這篇文章主要給大家介紹了關于uniapp小程序實戰(zhàn)之利用騰訊地圖獲取定位的相關資料,需要的朋友可以參考下
    2023-02-02
  • prototype class詳解

    prototype class詳解

    prototype class詳解...
    2006-09-09
  • JavaScript實現數組對象轉換為鍵值對的四種方式

    JavaScript實現數組對象轉換為鍵值對的四種方式

    本文探討了將包含 {icon: "abc", url: "123"} 形式對象的數組轉換為鍵值對形式的四種方法,并從實現方式的簡潔性、可讀性和性能角度進行了分析比較,感興趣的朋友可以參考下
    2024-02-02
  • JS按字節(jié)截取字符長度實例

    JS按字節(jié)截取字符長度實例

    這篇文章主要介紹了JS按字節(jié)截取字符長度實例,有需要的朋友可以參考一下
    2013-11-11
  • JS實現的適合做faq或menu滑動效果示例

    JS實現的適合做faq或menu滑動效果示例

    這篇文章主要介紹了JS實現的適合做faq或menu滑動效果,結合實例形式分析了基于JS實現的頁面元素滑動漸變效果的相關實現技巧,需要的朋友可以參考下
    2016-11-11
  • JavaScript創(chuàng)建對象方式總結【工廠模式、構造函數模式、原型模式等】

    JavaScript創(chuàng)建對象方式總結【工廠模式、構造函數模式、原型模式等】

    這篇文章主要介紹了JavaScript創(chuàng)建對象方式,結合實例形式總結分析了工廠模式、構造函數模式、原型模式等各種常見的javascript對象創(chuàng)建方式與相關操作注意事項,需要的朋友可以參考下
    2018-12-12

最新評論

汾阳市| 乐清市| 临颍县| 井研县| 南靖县| 彭州市| 乐都县| 东乡族自治县| 祁东县| 泾源县| 通辽市| 滁州市| 屏山县| 甘德县| 扶绥县| 祁阳县| 沂源县| 辽源市| 兴文县| 吐鲁番市| 闸北区| 巫山县| 安泽县| 辛集市| 大关县| 清河县| 泾阳县| 正安县| 乌拉特前旗| 青海省| 崇信县| 万荣县| 新巴尔虎左旗| 方城县| 车致| 赫章县| 克什克腾旗| 永登县| 新兴县| 吴旗县| 南充市|