1.單獨的作用域
var val = 1
const fun = (val, y=()=>val=2 ) =>
fun();
console.log(val) //1
上面**中,
首先看內部val的列印結果:3。
原因是一旦設定了引數的預設值,函式進行宣告初始化時 ,引數會形成乙個單獨的作用域。等到初始化結束,這個作用域就會消失。通俗地說,引數預設值y宣告的時候,匿名函式y內部的val指向了與其同一作用域的第乙個引數val,那麼函式fun內部再次執行y()的時候,val並不會變為2,依舊是3。
外部的列印結果:1。
fun內部宣告的val與外部的val不在同一作用域,所以不是同一變數。
2.將上面的**,改寫一下,會達到預期的結果:
var val = 1
const fun = (val, y=()=>val=2 ) =>
fun();
console.log(val) //1
這個時候,y()內部的val與fun內部的val指向的是同乙個變數,val被更改為2;
外部val仍然是1,不受影響
3.因為外部val是值型別,非引用型別,並且函式fun內部是臨時作用域,函式傳參是值傳遞【之前有部落格介紹,js函式的按值傳遞】,如果想實現,外部的val=3的效果,最簡單的方式如下:
直接對val的原始值進行操作
var val = 1
const fun = () =>
fun();
console.log(val) //3
方法引數 預設值 ES6 函式的預設值
es6 之前,不能直接為函式的引數指定預設值,只能採用變通的方法。function log x,y log hello hello world log hello 你好 hello china 這裡可以看到,檢查函式log的引數y有沒有賦值,如果沒有,則指定預設值為 哈嘍 這種寫法的缺點在於,如果引...
ES6 函式引數的預設值
在es6之前,不能直接為函式的引數指定預設值,只能採取變通的方法。function log x,y log kkk kkk world這種寫法的缺點在於 如果引數y賦值了,但是對應的布林值為false,則該賦值不起作用。如果在呼叫函式的時候,傳入的y引數是乙個空字串,那麼y就會被修改為預設值。避免這...
ES6 函式預設值
1 es6之前,函式如果需要預設值,需要在函式內額外處理,如 function log x,y log hello hello world log hello es6 hello es6 log hello hello world上述 中第二行,檢查y引數是否有值,如果沒有,將其賦值為預設值 wor...