var a =10;
function
one(
)function
two(
)two()
;//10
a =10是全域性的,而 a =
20 是區域性的
一、
var a =10;
function
one(
)one()
;//undefined 一是預解析,而是就近查詢。
二、var a =
10;function
one(
)one()
;//10
這個雖然是就近原則,但是就近找var宣告的變數,因為a =
20沒有var宣告,只是修改了a的值,所以到外面去找了,輸出的是10.注意:當a =
20時,console.log進行輸出還沒執行到那。
var a =10;
function
one(
)one()
;//20
var a =
10function
one()}
one(
);
var a =10;
funtion one()
one(a)
;//10
js中傳參時,基本型別傳值,引用型別傳引用。
var a =5;
var b =5;
b +=
3console.
log(a)
;//5
var a =[1
,2,3
];var b = a;
b =[1,
2,3,
4];console.
log(a)
;//[1,2,3]
引數與變數一樣也是有作用域
var a =10;
function
one(a)
one();
//10
var a =10;
function
one(a)
one();
console.
log(a)
//13
一、js立即執行函式的寫法
第一種:最前最後加括號
(
function()
());
第二種:function外面加括號
(
function()
)();
第三種:function前面加運算子,常見的是!
!function()
();
二、立即執行函式的引數
可以給立即執行函式傳遞引數
(
function
(a,b)
("zimu"
,new
date()
));
注意:
1、立即執行函式內部是可以訪問外部變數的,所以很多情況下,我們並不需要傳引數。
三、立即執行函式的返回值
乙個立即執行函式也能返回值並且可以複製給其它變數
var result =
(function()
());
var result =
(function()
)();
四、立即執行函式的優勢
1、立即執行函式可以封裝大量的工作而不會遺留任何全域性變數。
2、定義的所有變數都會成為立即執行函式的區域性變數,所以你不用擔心這些臨時變數會汙染全域性空間。
五、注意點
立即執行函式通常作為乙個單獨模組使用。一般沒有問題。但是,建議在自己寫的立即執行函式前加分號,這樣可以有效地與前面**進行隔離。否則,可能出現意想不到的錯誤。
var a =
12var b =a(
function()
())//is not a function
js 作用域,作用域鏈,立即執行函式,閉包
作用域 1全域性作用域 全域性作用域就是最外層函式定義的變數,對任何內部函式來說,都是可以訪問的。2.區域性作用域 區域性作用域就是只在固定 片段內可以訪問到,在函式外部是無法訪問的。函式外是不可以訪問到函式內的,所以報錯。作用域鏈 scope 中所儲存的執行期上下文物件的集合,這個集合成鏈式鏈結,...
詞法作用域 VS 動態作用域 VS 立即執行函式
js詞法作用域是由你在寫 時將變數和塊作用域寫在 來決定。js動態作用域和this機制息息相關。它的作用域詩是在執行的過程中確定 var a 1 function foo foo 1從上面的 我們可以看出 foo中列印a的值不是由寫 的位置確定的,而是取決於foo執行的位置。最小授權原則最小授權原則...
js立即執行函式
void function func function param function param param function function function 這些可能在平時寫一些普通指令碼的時候不會用,也不常見,但是當你看別人的原始碼的時候就會發現,特別是一些js的外掛程式時候,是很常見的,初...