在js中如果函數與物件重名了會怎麼樣?仔細詳細這個問題值得討論一下,本文主要跟大家介紹了關於JavaScript中重名的函數與物件的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧啊,希望能幫助到大家。
JavaScript 允許重複宣告變量,後來宣告的覆寫之前的。
var a = 1; var a = 'x'; console.log(a); //输出'x'
JavaScript允許重複定義函數。
JavaScript沒有重載這個概念,它只依據函數名稱來區分函數。
後定義的同名函數覆寫之前的,與參數無關。
function test() { console.log("test"); } test(); //输出 "test arg0 + undefined" function test(arg1) { console.log("test arg" + arguments.length + " + " + arg1); } test(1,2); //输出 "test arg2 + 1"
實參個數如果比形參少,那麼剩下的預設賦值為undefined;如果實參傳的比形參數量多,那麼是全部都會被傳進去的,只不過沒有對應的形參可以引用(但可以用arguments來取得剩下的參數)
function test(arg1) { for(var i=0; i<arguments.length; i++) { console.log(arguments[i]); } } test(1,2); //输出 1 2
變數與函數重名的時候,變數生效
這牽涉到了變數和函數的預解析:
- 變數宣告會被頂置,函數宣告也會被頂置且比變數更先宣告。
- 變數的宣告和賦值語句一起寫入時,JS引擎在解析時,會將其拆成宣告和賦值2部分,宣告置頂,賦值保留在原來位置。
- 宣告過的變數不會再重複宣告。
var a = 100; function a() { return "function"; } console.log(a); //输出 100 console.log(a()); /* 报错 Uncaught TypeError: a is not a function (anonymous function) @test.html:9 */
JS中有兩種函數,一種是普通函數,一種是函數物件。下面的這種就是“函數物件”,它實際上是聲明一個匿名函數,然後將該函數的init方法賦值給該變數。
var a = 100; var a = function() { return "function"; } console.log(a); /* 输出 function() { return "function"; } */ console.log(a()); //输出 "function"
函數與內部變數重名
定義普通函數,即在window變數下,定義一個key,它的名字為該函數名,值為該函數的位址。函數內部的this指向window物件。
function a() { console.log(this); //输出 window{...} this.a = 1; //即 window.a = 1,此时window下的function a已经被该变量覆盖了。 var a = 5; //下面的这几个变量都是局部变量,仅在花括号范围内有效。 a = 10; var v = "value" return "function"; } console.log(a); //输出 function a {...} console.log(a()); //输出 "function" console.log(a); //输出 1 console.log(v); /* 输出 Uncaught ReferenceError: v is not defined (anonymous function) @ mycolor.html:15 */
相關推薦:
以上是JavaScript中重名的函數與物件解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!