1. 程式人生 > >JS中變數名和函式名重名

JS中變數名和函式名重名

 var x=12
    var x=13
    function x() {
        console.log(x)
    }

    console.log(x);   //13
    //err:x is not a function
    x()

這個串程式碼執行完會報錯 : a is not a function

問題來了,為什麼會報這個錯誤呢? 這裡涉及到函式和變數的預解析:

1)函式宣告會置頂
2)變數宣告也會置頂
3)函式宣告比變數宣告更置頂:(函式在變數上面)
4)變數和賦值語句一起書寫,在js引擎解析時,會將其拆成宣告和賦值2部分,宣告置頂,賦值保留在原來位置
5)宣告過的變數不會重複宣告

知道以上的規則,上面的程式碼等同於 :

var x=function (){
  console.log(x);
}
var x=100;
x();

相關推薦

js變數宣告函式宣告提升

首先我們需要知道JS解析的兩個階段:預處理、執行期,本次來談談預處理階段。 預處理階段:JS會對程式碼中所有用var宣告的變數和函式宣告進行處理,將其提前。 注:其中變數也只是進行了宣告並未進行初始化以及賦值。 變數: 來個簡單的例子: console.log(a); var a

js的陣列物件的

在實際開發中,有時候需要把js中陣列和物件進行重置,下邊介紹幾種寫法: 陣列的重置: 方式1:使用splice var ary = [1,2,3,4]; ary.splice(0,ary.length); console.log(ary); // 輸出 [],空陣列,即

js的型別函式引數傳遞型別問題

js中的型別: 2大型別:原始型別和物件。 原始型別有 boolean、number、string這三個普通原始型別,還有null、undefined這倆特殊原始型別 物件嘛就多了,普通物件、內建物件、全域性物件、函式、陣列等。 函式引數傳遞型別:   對於原始型別,傳遞的是值,

JS變數函式

var x=12 var x=13 function x() { console.log(x) } console.log(x); //13 //err:x is not a function

js變數函式的問題

網上有很多的部落格有談到這個重名的問題,但是我覺得將不算是很全面,至少我看了還是不懂下面這道題到底是怎麼回事。那在講解這個問題的時候,我們先來看看下面這道題,一道面試題(南山西麗xx研究院): var a = 1; function b(){ a = 10;

測試javascript變數函式名字一樣

測試javascript中變數名和函式名字一樣 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>測試javascript中變數名和函式名字一樣</t

JS變數提升函式提升

在js中有一部分比較難以理解,卻也是在筆試過程中很容易考的,那就是變數提升和函式提升的問題,這篇文章我會就變數提升和函式提升的問題拓展一下有關js函式的知識點,包括作用域的問題,後面還會有一些小練習來判斷自己是否真的搞懂了。 作用域 在js中作用域分為全域性作用域和

PHP使用字串傳遞變數函式

<?php function showTime($val = null) { if ($val) { return time(); } else { return 'param error!'; } } $para

JS變數提示函式提示問題

學習完後的總結: Js程式碼分為兩個階段:編譯階段和執行階段;             Js程式碼的編譯階段會找到所以的申明,並用合適的作用域將他們關聯起來,這個是詞法作用域的核心內容;             包括變數申明和函式聲名都會在程式碼被執行前的編譯階段首先被處理

理解JS變數宣告提升函式宣告提升

(一)變數宣告提升: 1.變數定義 ES6之前可以使用var關鍵字來定義一個變數;若變數未初始化,則變數的值為undefined 2.變數作用域 根據變數作用域可以分為全域性變數和區域性變數;全域性變數的作用域為全部作用域;區域性變數作用域為函式內; 在函式作用域內

tf.get_variable 變數初始化函式Xavier初始化器

當使用 tf.get_variable(name, shape=None, initializer=None) 來定義變數時,可以利用變數初始化函式來實現對 initializer 的賦值。 在神經網路中,最常權重賦值方式是 正態隨機賦值 和 Xavier賦值。 1. 變數初始

sql語句count(1)count(欄位)的區別

count(1)會統計包括null值的所有符合條件的欄位的條數 count(欄位名)統計非null值的所有符合條件的欄位的條數 比如: tb_source表中資料 count(1)統計當type=3時source_name的條數 select count(1) from tb_so

深入理解Node.js的AsyncAwait函式

這篇文章主要介紹了Node.js中的Async和Await函式的相關知識,非常不錯,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。 在本文中,你將學習如何使用Node.js中的async函式(async/await)來簡化c

js變數jspjava程式碼變數互相訪問解決方案

1。js變數獲取jsp頁面中java程式碼的變數值。  方法:var JS變數名 = <%=JAVA變數名 %>    我們常常會將js檔案和jsp檔案分開寫,在js檔案中,上面的方法似乎不管用了。 也可以通過變通的方法來解決: a.jsp <

jsonclick事件用“return”開頭+方法的返回值

js中onclick事件用“return”開頭+方法名,方法內的返回值如果在任何一個事件上新增js方法上的時候要加上return; 在方法裡面要加上返回值。return true:事件本身的功能接著往上執行 return false:事件本身的功能不執行。比如:在a標籤內使

JS全域性變數VARTHIS--在函式內部,加var是區域性變數,不加是全域性變數

JS全域性變數VAR和THIS 2011-05-23 21:43 很多人都覺得在javascript宣告一個變數,加var和不加var沒有什麼區別,實際上是一個錯誤的觀點,如果在函式外面,也就是說在window區域加不加var確實是一樣,因為都會是全域性變數的效果,

關於js變數作用於變數提升的那些事

一個變數的作用域(scope)是程式原始碼中定義這個變數的區域。 全域性變數擁有全域性作用域,在javaScript程式碼中任何地方都有定義的。 然而在函式內宣告的變數只是在函式內部有定義,他們是區域性變數,作用域也只是在區域性。 在函式體內,區域性變數的

JS的callapply函式

call 函式 語法 obj.call(thisObj,arg[,arg2[,arg3[,...agr]]]); 簡介 thisObj繼承obj的屬性和方法(obj原

js的回撥函式的理解使用方法

原文地址:http://www.cnblogs.com/minshia/p/5935951.html 一. 回撥函式的作用 js程式碼會至上而下一條線執行下去,但是有時候我們需要等到一個操作結束之後再進行下一個操作,這時候就需要用到回撥函式。 二. 回撥函式的解釋

js 變數提升 函式提升

開發十年,就只剩下這套架構體系了! >>>