從個人認知層次出發,依次寫下理解
1.接觸過js的朋友大都知道下面的錯誤:
<style>
span {
background-color: #ffa500;
cursor: pointer;
color: #fff;
}
</style>
<div id="demo">
<span>0</span> <span>1</span> <span>2</span> <span>3</span>
</div>
我想通過點擊span得到它的序列號:var demo = document.getElementById("demo");
var spans = demo.children;
for(var i=0;i<spans.length;i++){
spans[i].onclick = function() {
alert(i);
}
}
for(var i=0;i<spans.length;i++){
spans[i].onclick = function(num) {
return function() {
alert(num)
}
}(i);
}
這樣就能得到我們想要的結果了。這段代碼 相當於:
for(var i=0;i<spans.length;i++){
spans[i].onclick = fun(i);
function fun(num) {
return function() {
alert(num)
}
}
}
for(var i=0;i<spans.length;i++){
spans[i].index = i;
spans[i].onclick = function () {
alert(this.index);
}
}
2.變量作用域<script>
var key = "你好嗎";
function fun() {
var num = 10;
console.log(num);
console.log(key);
}
fun();
console.log(num);
</script>
4.可能有些同學對修改後的第一段代碼還是一頭霧水,其實這裏使用了一個立即執行的函數.後面的括號(i)表示把i當參數傳入,函數立即執行,num(形參)用來保存得到的i的值。
5.實例
<script>
function outerFun(){
function innerFun(){
var a=0;
a++;
alert(a);
}
return innerFun;
}
var obj=outerFun();
obj(); obj();
var obj2=outerFun();
obj2(); obj2();
</script>
a爲函數 innerFun()的內部變量,在被調用時每次都被重新賦值爲0 該函數運行結果爲 1 1 1 1 <script>
var a = 0;
function outerFun(){
function innerFun(){
a++;
alert(a);
}
return innerFun;
}
var obj=outerFun();
obj(); obj();
var obj2=outerFun();
obj2(); obj2();
</script>
<script>
function outerFun()
{
var a=0;
function innerFun()
{
a++;
alert(a);
}
return innerFun;
}
var obj=outerFun();
obj(); obj();
var obj2=outerFun();
obj2(); obj2();
</script>