DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 淺談JavaScript中變量和函數聲明的提升
淺談JavaScript中變量和函數聲明的提升
編輯:關於JavaScript     

現象:

1. 在JavaScript中變量和函數的聲明會提升到最頂部執行。

2. 函數的提升高於變量的提升。

3. 函數內部如果用var聲明了相同名稱的外部變量,函數將不再向上尋找。

4. 匿名函數不會提升。

5. 不同<script>塊中的函數互不影響。

例子:

函數聲明提升高於變量聲明

//同時聲明變量a和函數a
var a;
function a() {} 
alert(typeof a); //顯示的是"function",初步證明function的優先級高於var。

//先聲明函數後聲明變量,證明上邊的例子不是function覆蓋了變量
function a() {}
var a; 
alert(typeof a); //顯示的仍是"function",而不是"undefined",即function的優先級高於var。

//聲明了變量的同時賦值
function a() {}
var a = 1;
alert(typeof a); //number,此時不是function了。
//說明:"var a=1"相當於"var a;a=1",即先聲明,後賦值,"a=1"相當於把a重新賦值了,自然就是number!

函數內部用var定義了和外部相同的變量,函數將不再向上找外部的變量

var value = 'hello';
function show() {
  alert(value);
  if (!value) {
    var value = 'function';
  }
  alert(value);
}
show() //此處調用函數依次彈出 "undefined", "function"

//上例相當於var value = 'hello';
function show() {
  var value; //注意這行
  alert(value);
  if (!value) {
    value = 'function'; //這行去掉var
  }
  alert(value);
}
show()//1.如果上列中show內部定義value未用var,則會用到外部的變量,彈出"hello", "hello"。 
//2.如果函數內部未定義value,也能獲取到外部的value值。

匿名函數不會向上提升

getName()
var getName = function () {
  alert('closule')
}
function getName() {
  alert('function')
}
getName()

//上邊的代碼相當於
function getName() { //函數向上提升
  alert('function')
}
getName()
var getName = function () {
  alert('closule')
}
getName()

//代碼執行分別彈出 "function", "closule"

不同<script>塊中的函數互不影響

<script>
  getName()
  var getName = function () {
    alert('closule')
  }
<script>
<script>
  function getName() {
    alert('function')
  }
<script>

//代碼執行報錯:TypeError: getName is not a function
//因為第一個<script>塊中getName()函數未定義,匿名函數又不會向上提升

以上這篇淺談JavaScript中變量和函數聲明的提升就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved