首頁  >  文章  >  web前端  >  JavaScript中重名的函數與物件解析

JavaScript中重名的函數與物件解析

小云云
小云云原創
2018-02-01 09:14:001500瀏覽

在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
*/

相關推薦:

有關於如何解決js重名方法的先後呼叫問題

以上是JavaScript中重名的函數與物件解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn