预解析、预闭包、自调函数、多赋值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<ul id="list">
<li>公司简介</li>
<li>联系我们</li>
<li>营销网络</li>
</ul>
<script>
//预加载
var a = 100; //全局
(function test() {
a = 10;
console.log(a);//10 取得是函数里面的a
console.log(this.a)//浏览器里面,调用的是window里面的a=100,node里面是//undefind
var a//预解析,将代码挪到了第20行 a=undefind
console.log(a);//100 取得是函数域里面的A
})();
</script>
<script>
var list = document.getElementById("list");
var li = list.children;
//let方法 Es6块的作用域
for (let i = 0; i < li.length; i++) {
li[i].onclick = function () {
alert(i); // 结果总是3.而不是0,1,2
}
}
//闭包方法
// var list = document.getElementById("list");
// var li = list.children;
// for (var i = 0; i < li.length; i++) {
// (function (m) {
// li[i].onclick = function () {
// alert(m); // 结果总是3.而不是0,1,2
// }
// })(i);
// }
</script>
<script>
//先主线,后异步,
// test()
// function test() {
// for (var i = 0; i <= 10; i++) {
// setTimeout(function () {
// console.log(i);
// },
// 0)
// }
// }
</script>
<script>
//自调函数 与 多赋值等号
var a = 10;
(function () {
var a = b = 100 // a=b->b没有var则创建全局变量b->b=100
})();
console.log(a + '+' + b);// a=undifind b=100
</script>
<script>
//闭包
// function fun() {
// var name = "test"
// return function () {
// var b = 0;
// console.log(name);
// }
// }
// var fn = fun();
// console.log(fn.b);
// //fn();
//闭包
// function fun() {
// var name = "test"
// this.sayname = function () {
// console.log(name)
// }
// }
// var bb = new fun();
// bb.sayname();
</script>
</body>
</html>