當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript(arguments)
生活随笔
收集整理的這篇文章主要介紹了
javascript(arguments)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事出有因
今天去做了金山網絡招聘實習生的試卷,有一道題目確實讓我有點在當時不太肯定,畢竟自己的腦袋還不是javascript解析器,然后回來就打開chrome的控制臺,執行后就認為自己要去總結這個知識點了。
題目例如以下(僅僅能說大概,有點忘記,可是考察知識點是一樣)
- function foo(a,b,c){
- c = 3;
- console.log(arguments);
- }
- foo(1,2)
- foo(1,2,undefined)
確實當時看見這道題目的時候,心里還是有非常多疑問的,最后僅僅能歸結成一個是arguments對象是什么時候才賦值?
了解arguments
arguments的基本信息代碼:
- function foo(a,b,c){
- var arguments = 1;
- console.log(arguments);
- }
- foo(1,2)
結果:1
代碼:
- function foo(a,b,c){
- arguments[0] = "monkindey";
- console.log(a);
- }
- foo(1,2)
結果:"monkindey"
那好吧,我們還是揭秘金山實習生招聘的筆試題
foo(1,2)原因:arguments標示符在《javascript權威指南》中指出,它是指向實參對象的引用。實參對象是一個類數組,當實參對象改,那么arguments也會跟著改。而實參對象僅僅有在函數調用時才賦值,比方上面實參對象就類似于{a:1,b:2},可是沒有c,所以給c賦值,改變不了實參對象,而arguments是它的引用,所以它也沒影響。
原因:實參對象會是{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)
原因:個人認為當我們調用一個函數,傳入進去的實參,就是給一個函數中的形參賦值,事實上相當于在函數定義一個局部變量,變量名就是那個形參名,上面的代碼能夠看成
- function foo(a,b,c){
- var a = 1;//傳入實參的形參相當于在函數體中定義一個局部變量
- var a = 3;
- console.log(arguments[0]);
- }
- foo(1,2)
- function foo(a,b,c){
- var a ;
- console.log(arguments[0]);
- }
- foo(1,2)
原因:上面的代碼能夠看成
- function foo(a,b,c){
- var a = 1;//傳入實參的形參相當于在函數體中定義一個局部變量
- var a ;//反復定義一個變量可是又不賦值,javascript解析器會把它忽略掉的(我的猜想)
- console.log(arguments[0]);
- }
- foo(1,2)
參考文獻
arguments MDN
《javascript權威指南》
JavaScript函數參數的可改動性
總結
以上是生活随笔為你收集整理的javascript(arguments)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript数组常用方法
- 下一篇: mysqldump导入导出mysql数据