JavaScript——函數

1、函數的定義與調用(與python類同) 
// 無參函數function f1() {
  console.log("Hello world!");
};
f1();// 有參數函數function f2(a, b) {
  console.log(arguments);  // 內置的arguments對象  console.log(arguments.length);

  console.log(arguments[0],arguments[1]);
  console.log(a, b);
};
f2(10,20);// 帶返回值的函數function sum(a, b){  return a + b;
}
sum(1, 2);  // 調用函數// 匿名函數var sum = function(a, b){  return a + b;
}
sum(1, 2);// 當即執行函數(function(a, b){  return a + b;
})(1, 2);

 

2、函數中的arguments參數
function add(a,b){
  console.log(a+b);
  console.log(arguments.length)
}

add(1,2)   //  3  2 注意:函數只能返回一個值,若是要返回多個值,只能將其放在數組或對象中返回
3、函數的全局變量和局部變量
#局部變量:在JavaScript函數內部聲明的變量(使用 var)是局部變量,因此只能在函數內部訪問它(該變量的做用域是函數內部)。只要函數運行完畢,局部變量就會被刪除。#全局變量:在函數外聲明的變量是全局變量,網頁上的全部腳本和函數都能訪問它。#變量生存週期:JavaScript變量的生命期從它們被聲明的時間開始。
局部變量會在函數運行之後被刪除。
全局變量會在頁面關閉後被刪除。
4、做用域

首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。另外函數的做用域關係是在定義階段就固定死的,與調用位置無關javascript

//舉例,用法 跟python查找變量的順序一致var city = "BeiJing";function f() {  var city = "ShangHai";  function inner(){    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  //ShenZhenvar city = "BeiJing";function Bar() {
  console.log(city);
}function f() {  var city = "ShangHai";  return Bar;
}var ret = f();
ret();  // BeiJingvar city = "BeiJing";function f(){    var city = "ShangHai";    function inner(){
        console.log(city);
    }    return inner;
}var ret = f();
ret();  //ShangHai
5、javascript中的變量提高和函數提高

一、在js中只有兩種做用域java

  全局做用域、函數做用域python

  ps:在ES6以前,js是沒有塊級做用域。數組

二、什麼是沒有塊級做用域?ide

 三、什麼是變量提高?函數

在js中,代碼執行時分兩步走:一、解析 二、一步一步執行對象

那麼變量提高就是變量聲明會被提高到做用域的最頂上去,也就是該變量無論是在做用域的哪一個地方聲明的,都會提高到做做用域的最頂上去。blog

 

 舉例分辨:ip

 

四、什麼是函數提高?ci

舉例1:

fn();  //此處能夠正常調用console.log(fn);function fn(){
    console.log("哈哈哈哈")
}
fn(); //此處也能夠正常調用//輸出結果:哈哈哈哈
{
    console.log("哈哈哈哈")
}
哈哈哈哈//注意:函數聲明式,會將函數的聲明和定義一塊兒提高到做用域的最頂上去。

舉例2:

函數表達式聲明的函數

console.log(fn); //undefinedvar fn=function (){
    console.log("舉例2")
};
console.log(fn);//輸出結果:ƒ (){
    console.log("舉例2")
}

舉例3:

若是函數聲明和變量聲明使用的是同一個變量名稱,函數聲明的優先級高於變量聲明的優先級

console.log(fn);function fn(){"舉例3"};var fn="hello";
console.log(fn);//輸出結果:ƒ fn(){"舉例3"}
hello

總結:

#1:全部的聲明都會提高到做用域的最頂上去。#2:同一個變量只會聲明一次,其餘的會被忽略掉。#3:函數聲明的優先級高於變量申明的優先級,而且函數聲明和函數定義的部分一塊兒被提高。
相關文章
相關標籤/搜索