函数定义和未定义的区别
var add = (function () {
var counter = 0;
return function () {
//alert(counter)
return counter += 1;
};
})();
(把括号移进去和放出来的效果是一样的
把function的外面的括号去掉效果也是一样的)
但要注意对于定义了的函数这3中写法都可以
但是对于未定义的函数
function abc(){}()这么写时就会报错
function abc(){}()这么写时就ok
要(function abc(){})()这么写才行,因为js引擎在执行的时候会先把未定义的定义上(加上var)
1 aaa();
function aaa(){
alert(111)
}
(此函数可以自动提升位置)
2 aaa();
var aaa = function(){
alert(111)
}
(此函数既然写了var了那么显然就位置就死了)
(上面会报错,aaa未定义)
aaa();
var aaa = function(){
alert(111)
}
(运行ok,可弹出111)
对于匿名函数,因为它没有名字,被调不了,所以只能以return的方式出现
再一个要注意的就是()它只执行一次
反例如下:
<!DOCTYPE html>
<html>
<body>
<p>局部变量计数。</p>
<button type="button" οnclick="myFunction()">计数!</button>
<p id="demo">0</p>
<script>
var add = function add () {
var counter = 0;
return function () {
//alert(counter)
return counter += 1;
};
}();
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
(function e(){
// alert('Hello World1');
})();
//函数表达式后面加括号,当javascript引擎解析到此处时能立即调用函数
</script>
</body>
</html>
var add = (function () {
var counter = 0;
return function () {
//alert(counter)
return counter += 1;
};
})();
(把括号移进去和放出来的效果是一样的
把function的外面的括号去掉效果也是一样的)
但要注意对于定义了的函数这3中写法都可以
但是对于未定义的函数
function abc(){}()这么写时就会报错
function abc(){}()这么写时就ok
要(function abc(){})()这么写才行,因为js引擎在执行的时候会先把未定义的定义上(加上var)
1 aaa();
function aaa(){
alert(111)
}
(此函数可以自动提升位置)
2 aaa();
var aaa = function(){
alert(111)
}
(此函数既然写了var了那么显然就位置就死了)
(上面会报错,aaa未定义)
aaa();
var aaa = function(){
alert(111)
}
(运行ok,可弹出111)
对于匿名函数,因为它没有名字,被调不了,所以只能以return的方式出现
再一个要注意的就是()它只执行一次
反例如下:
<!DOCTYPE html>
<html>
<body>
<p>局部变量计数。</p>
<button type="button" οnclick="myFunction()">计数!</button>
<p id="demo">0</p>
<script>
var add = function add () {
var counter = 0;
return function () {
//alert(counter)
return counter += 1;
};
}();
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
(function e(){
// alert('Hello World1');
})();
//函数表达式后面加括号,当javascript引擎解析到此处时能立即调用函数
</script>
</body>
</html>