千鋒教育JavaScript全套視頻教程(10天學會Js,前端javascrip

JavaScript 允許重復聲明變量,后聲明的覆蓋之前的
var a = 1; var a = 'x'; console.log(a); // 輸出 'x'
JavaScript 允許重復定義函數(shù)
JavaScript 沒有重載這個概念,它僅依據(jù)函數(shù)名來區(qū)分函數(shù)。
后定義的同名函數(shù)覆蓋之前的,與參數(shù)無關。
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"
實參個數(shù)如果比形參少,那么剩下的默認賦值為?undefined,如果實參傳的比形參數(shù)量多,那么是全部都會被傳進去的,只不過沒有對應的形參可以引用(但可以用 arguments 來獲取剩下的參數(shù))。
function test(arg1) { for(var i=0; i<arguments.length; i++) { console.log(arguments[i]); } } test(1,2); //輸出 1 2
變量與函數(shù)重名的時候,變量生效
這涉及到了變量和函數(shù)的預解析:
- 變量聲明會被頂置,函數(shù)聲明也會被頂置且比變量更先聲明。
- 變量的聲明和賦值語句一起寫時,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 中有兩種函數(shù),一種是普通函數(shù),一種是函數(shù)對象。下面的這種就是“函數(shù)對象”,它實際上是聲明一個匿名函數(shù),然后將該函數(shù)的 init 方法賦值給該變量。
var a = 100; var a = function() { return "function"; } console.log(a); /* 輸出 function() { return "function"; } */ console.log(a()); //輸出 "function"
函數(shù)與內(nèi)部變量重名
定義普通函數(shù),即在 window 變量下,定義一個 key,它的名字為該函數(shù)名,值為該函數(shù)的地址。函數(shù)內(nèi)部的 this 指向 window 對象。
function a() { console.log(this); //輸出 window{...} this.a = 1; //即 window.a = 1,此時window下的function a已經(jīng)被該變量覆蓋了。 var a = 5; //下面的這幾個變量都是局部變量,僅在花括號范圍內(nèi)有效。 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 */
標簽: