談js的變數宣告和函式宣告提升
首先我們需要知道JS解析的兩個階段:預處理、執行期,本次來談談預處理階段。
預處理階段:JS會對程式碼中所有用var宣告的變數和函式宣告進行處理,將其提前。
注:其中變數也只是進行了宣告並未進行初始化以及賦值。
變數:
來個簡單的例子:
console.log(a);
var a = 1;
!!會顯示undefined。
實際上,瀏覽器的解析過程如下:
var a;
console.log(a);
a = 1;
變數宣告提前了,但賦值語句並未改變位置,這就叫變數的提升。
函式:
JS中的函式定義分為兩種:函式宣告與函式表示式
來個例子:
fn();
var fn = function aa() { //函式表示式
console.log(a);
var a = 1;
}
!!會直接報錯。
再來一個對比一下:
fn();
function fn () {//函式宣告
console.log(1);
}
!!結果為1。
結論:函式宣告可以提升,函式表示式的宣告不能提升。
相關推薦
談js的變數宣告和函式宣告提升
首先我們需要知道JS解析的兩個階段:預處理、執行期,本次來談談預處理階段。 預處理階段:JS會對程式碼中所有用var宣告的變數和函式宣告進行處理,將其提前。 注:其中變數也只是進行了宣告並未進行初始化以及賦值。 變數: 來個簡單的例子: console.log(a); var a
javascript的變數宣告和函式宣告提升
*參考《你不知道的Javascript(上)》第一部分第四章——提升 要理解javascript的變數宣告和函式宣告的提升,重要的是理解瀏覽器引擎對javascript程式碼的處理過程:包括變數和函式在內的所有宣告都會在任何程式碼被執行前首先被處理。如: v
理解JS中變數宣告提升和函式宣告提升
(一)變數宣告提升: 1.變數定義 ES6之前可以使用var關鍵字來定義一個變數;若變數未初始化,則變數的值為undefined 2.變數作用域 根據變數作用域可以分為全域性變數和區域性變數;全域性變數的作用域為全部作用域;區域性變數作用域為函式內; 在函式作用域內
深入理解變數宣告提升和函式宣告提升
變數宣告提升 1、變數定義 可以使用var定義變數,變數如果沒有賦值,那變數的初始值為undefined。 2、變數作用域 變數作用域指變數起作用的範圍。變數分為全域性變數和區域性變數。全域性變數在全域性都擁有定義;而區域性變數只能在函式內有效。 在函式體內,同名的區
淺談js變數宣告
----淺談js變數宣告 或者確切地說應該是變數宣告以及與之相關的一些東西。 這裡只談四種宣告方式(var,function,let,const),其它的宣告方式以後有接觸再更新。 ‘var’ VS ‘let’ var貌似是最常用的,在ES6還沒出來的時候只能用v
JS-函式宣告 和 函式表示式
問題: 1, function foo() {}; 2, var foo = function () {}; 1,上面的語法是宣告,
js-函式表示式和函式宣告的區別
1.函式宣告 函式宣告以function關鍵字開頭,接著是必須的函式(變數)名和以逗號分隔的可選的引數列表,再接著就是以大括號封裝的函式體。函式宣告必須是一個單獨的JavaScript語句。必須含有函式名 2.函式表示式 在任何情況下都是其它JavaScript語句的一部分(比如賦值表示式等號的右側、函
JS函式宣告和函式表示式的區別
另一方面,仔細看一看產生規則也會發現,唯一可能讓Expression(表示式)出現在Block(塊)中情形,就是讓它作為ExpressionStatement(表示式語句)的一部分。但是,規範明確規定了ExpressionStatement(表示式語句)不能以關鍵字function開頭。而這實際上就是
C中全域性變數和函式宣告的認識
在C中可以定義全域性變數,全域性變數是在程式載入初始化時分配空間並進行初始化。在c程式碼中定義/宣告全域性變數的方式如下 1. int n; 定義或者宣告(如果在其他檔案中已定義)全域性變數。 2. int n = 10; 定義全域性變數並初始化。 3.
js學習(16)----函式宣告和函式作為引數
1.函式宣告和函式表示式 函式宣告需要被呼叫才會執行相應的內容,而函式表示式則相當於呼叫了函式。 如下: // 這是函式宣告,沒有看到;號 function sum(num1, num2) { // 函式體 } // 這是函式表示式 var
在變數作用域方面,函式宣告和函式表示式有什麼區別?
函式宣告提升,在函式宣告時定義好作用域; 函式表示式,只是變數名提升,隨著變數的改變,作用域也改變。 詞法環境with,和try…catch…不會影響函式宣告的變數作用域,但會影響函式表示式的變數作
JS中函式宣告和函式表示式的區別
review專案程式碼時,不同JS檔案之間在沒有相互引用的情況下,可以使用對方的方法,上網查了一下原因如下:在<body>標籤結束之前以下面的方式引入兩個js檔案<script src="a.js"></script> <script
JS函式-函式宣告和函式表示式之間的恩怨
“函式宣告”和“函式表示式”其實說白了 就是定義函式的方式 函式宣告: function 函式名(){.....}通過上面方式定義的函式就是函式宣告 函式表示式:通過函式表示式定義函式的方式比較
eval及函式宣告和函式表示式
1,eval:將一個物件行使額字串轉換為物件 { name: 'Jim' ,age :19}==>語法錯誤 //使用()將其轉化成表示式,{}不再是語句塊了,就是物件了 ->var o= eval( "( { name : 'Jim' ,age :19 } )"} //在js中有
函式表示式()()和函式宣告function的區別
區分函式表示式和函式宣告的區別在於function的位置,如果function不是出現在一段函式的第一個詞,那麼這是一個函式表示式,若function是第一個詞,則是一個函式宣告。函式宣告和函式表示式的區別有哪些呢?我們來看下面這一段程式碼: var a = 2; func
函式宣告和函式表示式——函式宣告的宣告提前
定義函式的方法主要有三種: 1、函式宣告; 2、函式表示式; 3、new Function建構函式 函式宣告的經典格式: function functionName(arg1,arg2,...){...} 函式表示式: var variable = functi
JS中的變數提示和函式提示問題
學習完後的總結: Js程式碼分為兩個階段:編譯階段和執行階段; Js程式碼的編譯階段會找到所以的申明,並用合適的作用域將他們關聯起來,這個是詞法作用域的核心內容; 包括變數申明和函式聲名都會在程式碼被執行前的編譯階段首先被處理
javascript中函式宣告和函式表示式的區別
1.js中函式表示式的定義 表示式(expression)JavaScript中的一個短語,javascript會將其計算(evaluate)出一個結果。程式中的常量是一個最簡單的表示式。變數名
函式宣告和函式表示式之間的區別
函式表示式是javascript中的一個既強大容易令人困惑的特性 《javascript高階程式設計》 定義函式的方式有兩種 //指定函式名的方式1.function sayHi(){ } 以上的函式宣告方式一個重要的特徵就是函式宣告提升,意思是在執行程式碼之前會先讀取函式宣告,意味著
函式宣告和函式表示式
建議使用函式宣告代替函式表示式,原因: 函式宣告是可命名的,所以他們在呼叫棧中更容易識別。此外,函式宣告會把整個函式提升(hoisted),而函式表示式只會把函式的引用變數名提升。這條規則使得箭頭函式