JavaScript你所不知道的困惑(3)

來源:互聯網
上載者:User

困惑一:

window.color = "red";var o = {color: "blue"};function sayColor(){alert(this.color);}sayColor();//redsayColor.call(this);   //redsayColor.call(window);   //redsayColor.call(o);    //blue
call方法能擴充函數範圍,每個函數都包含兩個非繼承而來的方法:apply()和call(),這兩個方法的用途是在特定的範圍中調用函數。

function sum(num1, num2){return num1 + num2;}function callSum1(num1, num2){return sum.apply(this, arguments);}function callSum2(num1, num2){return sum.apply(this, [num1, num2]);}alert(callSum1(10, 10));alert(callSum2(10, 10));
call()方法與apply()方法的作用相同,它們的區別僅在於接收參數的方式不同。對於call()方法而言,第一個參數是this值沒有變化,變化的是其餘參數都直接傳遞參數。

困惑二:

function add10(num){return num + 10;}function getGreeting(name){return "hello" + name;}function callSomeFunction(someFunction, someArgument){return someFunction(someArgument);}var result1 = callSomeFunction(add10, 10);alert(result1);   //20var result2 = callSomeFunction(getGreeting, "陽光小強");alert(result2);  //"hello陽光小強"
在ECMAScript中的函數名本身就是變數,所以函數也可以作為值來使用。

困惑三:

function factorial(num){if(num <= 1){return 1;}else{return num * arguments.callee(num - 1);}}alert(factorial(10));
上面代碼中的arguments.callee是什麼意思?

在函數內部有兩個特殊的對象:arguments和this。argument的主要作用是儲存函數參數,但這個對象還有一個名叫callee的屬性,該屬性是一個指標,指向擁有這個arguments對象的函數。另個個特殊對象this,是函數執行的環境對象。

困惑四:

eval("alert('hi')");   //hi
eval方法就像是一個完整的ECMAScript解析器,它只接受一個參數,當解析器發現代碼中調用eval方法時,它會將傳入的參數當作實際的ECMAScript語句來解析,然後把執行結果插入到原位置。

ECMAScript中內建對象,由ECMAScript實現提供的,不依賴於宿主環境的對象,這些對象在ECMAScript程式執行之前就已經存在了。開發人員不必顯式的執行個體化內建對象,因為它們已經執行個體化了。如:Object、Array和String。ECMA-262還定義了兩個單體內建對象:Global和Math

ECMAScript中的Global對象在某種意義上是作為一個終極的“兜底兒對象”來定義的。換句話說,不屬於任何其他對象的屬性和方法,最終都是他的屬性和方法。事實上,沒有全域變數和全域函數;所有在全域範圍中定義的屬性和函數,都是Global對象的屬性。如:isNaN()、isFinite()、parseInt()以及parseFloat()實際上都是Global對象的方法。除此之外,Global對象還包含了其他一些方法。

1、URL編碼方法。

2、eval()方法。

ECMAScript中雖然沒有指出如何直接存取Global對象,但web瀏覽器都是將這個全域對象作為window對象的一部分加以實現的。因此,在全域範圍中聲明的所有變數和函數,就都成為了window對象的屬性。

3、Global對象還包含一些屬性如undefined、NaN以及Infinity等。

4、Web瀏覽器都是將Global對象作為window對象的一部分加以實現的。因此,在全域範圍中聲明所有變數和函數,就都成為了window對象的屬性。

var color = "red";function sayColor(){alert(window.color);}window.sayColor();  //red








聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.