(function() { var a = b = 5; })(); console.log(b); // 非嚴格狀態顯示 5 // a 是局部變量,b 是全局變量 // 嚴格狀態顯示 b is not defined (function() { 'use strict'; var a = window.b = 5; })(); console.log(b) // 嚴格狀態下顯示 5
window.onload = function(){ var str = "hello"; var oText = document.getElementById('text'); // Javascript的繼承及原型屬性的知識,下面這個方法可以檢測在自己定義函數之前有沒有這個函數存在,避免重復定義 String.prototype.repeatify = String.prototype.repeatify || function(times){ var str = ''; for(var i=0;i<times;i++){ str += this; } return str; } oText.innerHTML = str.repeatify(3); }
window.onload = function(){ function test(){ console.log(a); console.log(foo()); var a=1; function foo(){ return 2; } } test(); } // 上面這段代碼相當於下面這段代碼 window.onload = function(){ function test(){ var a; function foo(){ return 2; } console.log(a); console.log(foo()); a = 1; } test(); }
window.onload = function(){ var fullname = 'John Doe'; var obj = { fullname:'Colin lhrig', prop:{ fullname:'Aulia De Rose', getFullname:function(){ return this.fullname; } } } var oText = document.getElementById('text'); oText.innerHTML = obj.prop.getFullname(); } // 顯示結果為 Aulia De Rose var test = obj.prop.getFullname; oText.innerHTML = test(); // 顯示結果為 John Doe
Javascript中關鍵字this所指代的函數上下文,取決於函數是怎樣被調用的,而不是怎麼被定義的。在第一個console.log(),getFullname()被作為obj.prop對象被調用。因此,當前的上下文指代後者,函數返回這個對象的fullname屬性。相反,當getFullname()被賦予test變量,當前的上下文指代全局變量window,這是因為test被隱形的作為全局變量的屬性。基於這一點,函數返回window的fullname。
window.onload = function(){ var fullname = 'John Doe'; var obj = { fullname:'Colin lhrig', prop:{ fullname:'Aulia De Rose', getFullname:function(){ return this.fullname; } } } var oText = document.getElementById('text'); oText.innerHTML = obj.prop.getFullname(); } // 顯示結果為 Aulia De Rose var test = obj.prop.getFullname; oText.innerHTML = test.call(obj.prop); // 顯示結果為 Aulia De Rose
call() 或者 apply()方法可以強制轉換上下文