日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript(arguments)

發布時間:2025/4/5 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript(arguments) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事出有因

今天去做了金山網絡招聘實習生的試卷,有一道題目確實讓我有點在當時不太肯定,畢竟自己的腦袋還不是javascript解析器,然后回來就打開chrome的控制臺,執行后就認為自己要去總結這個知識點了。

題目例如以下(僅僅能說大概,有點忘記,可是考察知識點是一樣)

  • function foo(a,b,c){
  • c = 3;
  • console.log(arguments);
  • }
  • foo(1,2)
  • foo(1,2,undefined)

確實當時看見這道題目的時候,心里還是有非常多疑問的,最后僅僅能歸結成一個是arguments對象是什么時候才賦值?

了解arguments

arguments的基本信息
1 它不是真正的數組,僅僅是一個類數組的對象,詳細兩者有什么差別,這個不是我們這篇文章了解的重點;
2 它創建于函數定義,并設置為null,賦值于函數調用,它是一個指向函數的參數列表的引用,是函數體訪問形參的接口
3 它僅僅能作用于該函數的函數體,在外界訪問這個對象會出錯或者僅僅是null
arguments奇葩行為
1 由于它是類數組的對象,它具有一個length屬性還有就是能夠用下標來訪問參數列表
2 由于它是函數的屬性,假設你在函數體中又一次定義一個arguments變量,它會覆蓋原來的arguments

代碼:

  • function foo(a,b,c){
  • var arguments = 1;
  • console.log(arguments);
  • }
  • foo(1,2)

結果:1

3 在非嚴格的情況下,我們能夠通過arguments來改動參數列表

代碼:

  • function foo(a,b,c){
  • arguments[0] = "monkindey";
  • console.log(a);
  • }
  • foo(1,2)

結果:"monkindey"

那好吧,我們還是揭秘金山實習生招聘的筆試題

foo(1,2)
答案:[1,2]
原因:arguments標示符在《javascript權威指南》中指出,它是指向實參對象的引用。實參對象是一個類數組,當實參對象改,那么arguments也會跟著改。而實參對象僅僅有在函數調用時才賦值,比方上面實參對象就類似于{a:1,b:2},可是沒有c,所以給c賦值,改變不了實參對象,而arguments是它的引用,所以它也沒影響。
foo(1,2,undefined)
答案:[1,2,3]
原因:實參對象會是{a:1,b:2,c:undefined},而在函數體中再改動c的話,就會設置實參對象中的c為3。所以console.log(arguments)會變成[1,2,3]

再練練兵

函數內部聲明的局部變量與形參同名
  • function foo(a,b,c){
  • var a = 3;
  • console.log(arguments[0]);
  • }
  • foo(1,2)
答案:3
原因:個人認為當我們調用一個函數,傳入進去的實參,就是給一個函數中的形參賦值,事實上相當于在函數定義一個局部變量,變量名就是那個形參名,上面的代碼能夠看成
  • function foo(a,b,c){
  • var a = 1;//傳入實參的形參相當于在函數體中定義一個局部變量
  • var a = 3;
  • console.log(arguments[0]);
  • }
  • foo(1,2)
假設僅僅是聲明局部變量a,卻不賦值,情況又不一樣了
  • function foo(a,b,c){
  • var a ;
  • console.log(arguments[0]);
  • }
  • foo(1,2)
答案:1
原因:上面的代碼能夠看成
  • function foo(a,b,c){
  • var a = 1;//傳入實參的形參相當于在函數體中定義一個局部變量
  • var a ;//反復定義一個變量可是又不賦值,javascript解析器會把它忽略掉的(我的猜想)
  • console.log(arguments[0]);
  • }
  • foo(1,2)

參考文獻

arguments MDN
《javascript權威指南》

JavaScript函數參數的可改動性

總結

以上是生活随笔為你收集整理的javascript(arguments)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。