1. 程式人生 > >JS函式宣告提前(2)

JS函式宣告提前(2)

 var t = 10;
        function test(test){
            var t = ++test;//t text=11
            console.log(t);//11
        }
        test(t);
        console.log(t);//10
        /*
        *函式宣告提前;執行js程式碼前,解析器將當前作用域內宣告的所有變數和函
        *數都會放到作用域的開始處
        *1 function test(t){}會提前宣告;
        *2 var t=10;
        *3 test(t); 執行函式 test(10);
        *4 function test(t){} 此時實參將10賦值給函式體的形參test 就是區域性變數 var text=10;
        *5 var t = ++test; t=11
        *6 函式體內 console.log(t) t=11;
        *7 外層函式 console.log(t);首先在自己函式域內尋找 發現var t=10; 則全域性變數t=10
         */
      
        var t = 10;
        function test(test){
            t = t + test;
            console.log(t);//20
        }
        test(t);
        console.log(t);//20

        /*
        *函式宣告提前;執行js程式碼前,解析器將當前作用域內宣告的所有變數和函
        *數都會放到作用域的開始處
        *1 function test(t){}會提前宣告;
        *2 var t=10;
        *3 test(t); 執行函式 test(10);
        *4 function test(t){} 此時實參將10賦值給函式體的形參test 就是區域性變數 var test=10;
        *5 t = t+test; 此時test=10 t在自己本函式作用域尋找,沒找到向上一層尋找,找到全域性
        *               變數 var t=10; 然後t=t+test=20;此時改變的是全域性變數的值 var=20;
        *6 函式體內 console.log(t) t=20;
        *7 外層函式 console.log(t);首先在自己函式域內尋找 發現var t=20(第五步改變的值);
        *                           則全域性變數t=20
        */

    
        var t = 10;
        function test(test){
            t = t + test;
            console.log(t);//undefined+10=NaN
            var t = 3;
        }
        test(t);
        console.log(t);//10
        /*
        *函式宣告提前;執行js程式碼前,解析器將當前作用域內宣告的所有變數和函
        *數都會放到作用域的開始處
        *1 function test(t){}會提前宣告;
        *2 var t=10;
        *3 test(t); 執行函式 test(10);
        *4 function test(t){} 此時實參將10賦值給函式體的形參test 就是區域性變數 var test=10;
        *5 t = t+test; 此時test=10 此時t會在本身函式作用域內尋找,由於var t=3;宣告會提前到
        *               函式體內的最前面,則var t;宣告但沒有賦值  t找到的時候,發現t 宣告
        *               但沒有賦值 所以t為undefine 則t=undefine+10=NaN    
        *6 函式體內 console.log(t) t=undefined;
        *7 外層函式 console.log(t);首先在自己函式域內尋找 發現var t=10;
        *                           則全域性變數t=10
        */
        
        
         function f(){
         alert(1);
        }
        f();
        function f(){
         alert(10);
        }
        f();
         /*
        *函式宣告提前;執行js程式碼前,解析器將當前作用域內宣告的所有變數和函
        *數都會放到作用域的開始處
        *1 第一個function f(){}會提前宣告;第二個function f(){}也會提前宣告
        *   但是發現兩個函式名相同,則發生覆蓋,只保留了第二個function f(){}
        *2 f();則alert(10)被列印
        
        */

相關推薦

JS函式宣告提前2

var t = 10; function test(test){ var t = ++test;//t text=11 console.log(t);//11 } test(t)

JS函數學習2

有一個 關鍵字 引入 apply() call() get error 方法 version JavaScript的函數不但是“頭等公民”,而且可以像變量一樣使用,具有非常強大的抽象能力 函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。

js正則表示式2

找到以某個字串開頭的字串 var myReg=/^(abc)/gim; 如果不加m,那麼只找一行,而加了m可以找到每行中以該字串開頭的匹配文字。 如: abcsfsdfasd7890hklfahskfkaluiop7890-7890782ksdlafkasdnfklsdnf;lsabc

js便籤筆記2——DOM元素的特性Attribute和屬性Property

** 本文轉載自:https://www.cnblogs.com/wangfupeng1988/p/3631853.html (感謝分享) 1.介紹: 上篇js便籤筆記http://www.cnblogs.com/wangfupeng1988/p/3626300.html最後提到了d

JS函式預解析小記

一,預解析:尋找var  function  形參     a=undefined    fn = function fn(){   alert();  }  二,逐行解讀程式碼:    

第七週上機實踐專案 專案1-成員函式,友元函式,和一般函式的區別2

問題及程式碼: (2)模仿上面的示例,完成求點類中距離的任務。你需要實現求距離函式的三種版本:分別利用成員函式、友元函式和一般函式求兩點間距離的函式,並設計main()函式完成測試。 提示:此專案和例子的區別在於“距離是一個點和另外一個點的距離”,不同版本在引數上有體現。三

談談 JavaScript 中的 宣告提前hoisting

有許多同學知道js在執行的時候,是從上到下,從左到右,一行一行執行的,但是不知道在這之前還要做一些事情,js程式在正式執行之前,會將所有var 宣告的變數和function宣告的函式,預讀到所在作用域的頂部,但是對var 宣告只是將宣告提前,賦值仍然保留在原位置

Node.js躬行記2——檔案系統和網路

一、檔案系統   fs模組可與檔案系統進行互動,封裝了常規的POSIX函式。POSIX(Portable Operating System Interface,可移植作業系統介面)是UNIX系統的一個設計標準。fs模組提供了多個操作目錄和檔案的方法,大多會有同步和非同步兩種版本,同步的方法名稱會以Sync為字

深入理解JavaScript系列2:揭祕命名函式表示式 命名函式表示式 函式表示式 函式宣告

還有一種函式表示式不太常見,就是被括號括住的(function foo(){}),他是表示式的原因是因為括號 ()是一個分組操作符,它的內部只能包含表示式,我們來看幾個例子: 函式宣告只能出現在程式或函式體內。 如果function foo(){}是作為賦值表示式的一部分的

如何編寫高質量的 JS 函式2 -- 命名/註釋/魯棒篇

本文首發於 vivo網際網路技術 微信公眾號 連結:https://mp.weixin.qq.com/s/sd2oX0Z_cMY8_GvFg8pO4Q作者:楊昆 上篇 《如何編寫高質量的 JS 函式(1) -- 敲山震虎篇 》介紹了函式的執行機制,此篇將會從函式的命名、註釋和魯棒性方

python學習_day54_前端基礎之js2

data 截取 定義 得到 let 結果 是什麽 index 插入   在JavaScript中除了null和undefined以外其他的數據類型都被定義成了對象,也可以用創建對象的方法定義變量,String、Math、Array、Date、RegExp都是JavaScri

Node.js學習筆記2:基本模塊

依次 常用模塊 nbsp 兩個 避免 ESS 第三方 text 編程 Node.js學習筆記(2):基本模塊 模塊 引入模塊   為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式。在No

C++過載2:通過成員函式和友元函式過載

分別通過成員函式和友元函式完成過載 #include <iostream> using namespace std; class Complex { public: Complex(double real =0,double imag=0):real(real),imag(i

node.js學習2

node.js 模組學習 學習一門新語言,就要學習它的api。(ps:這筆記其實早寫好了,前幾天做個h5,沒時間排版,等h5結束了,再總結。) 1:nodejs 檔案操作 node.js不只是能做網路程式設計,還能操作檔案 基本api (1)小檔案拷貝 var fs

Ardupilot chibios編譯,啟動,main函式學習2

目錄 文章目錄 目錄 摘要 1. Chibios編譯過程 2. Chibios啟動程式碼 1.startup_stm32f7xx.mk檔案 1.crt1.c 1.核心初始化函式

Vue.js2- 過濾器

概念:過濾器本質上就是一個函式,可被用作一些常見的文字格式化。 過濾器只可以用在兩個地方:mustache 插值表示式和 v-bind 表示式。 過濾器應該被新增在 JavaScript 表示式的尾部,由“管道”符指示;  全域性過濾器 <div id=

Spring Cloud Feign(宣告式服務呼叫)2

繼承特性 1.首先新建個工程,名為hello-service-api。因為要用到Spring MVC的註解所以要要加鎖spring-boot-web的依賴,具體如下: <?xml version="1.0" encoding="UTF-8"?> <project xml

朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式2

  朱有鵬C語言高階---4.9.2--單鏈表--訪問單鏈表中各個節點的資料(1) 朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式(2)     原始碼:4.9.3danlianbiao2.c #include &

2018.10.16 JS2

                                JS入門(2) 1.parseint() parsefloat() 遇到第一個位元組是非數字就結束了。 3.var a="hello world" a這個變數是字串了,對於裡面的每一個字母來說,它是位元組。裡面有11個位元組,位元組總數

react 入門-建立元件2無狀態功能函式

前面說的是通過繼承React.Component建立React元件。 還可以通過無狀態的功能函式構造React元件。 舉例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&