1.
bar(); //报错
var foo = function bar(name) {
console.log("hello" + name);
console.log(bar);
};
//alert(typeof bar);
foo("world"); //"hello"
console.log(bar); //undefined
console.log(foo.toString());
bar(); //报错
2.
function test() {
console.log("test 函数"); //由于没有return 所以会返回一个undefined
}
setTimeout(function() {
console.log("定时器回调函数");
}, 0)
test();
function foo() {
var name = "hello";
}
//test 函数 ,undefined,定时器回调函数
3.
var foo = 1;
function bar() {
foo = 10; //函数提升 将函数foo赋值为10,并不是吧全局变量变为10
return;
function foo() {}
}
bar();
alert(foo); //答案:1
4.经典闭包
// 你理解的闭包是什么: 我理解的闭包就是创建一个不被销毁的(私有)作用域,可以随时读取其他函数内部变量的函数。,
// 特点是:1.父函数里面有子函数.2.子函数使用父函数声明的变量3.子函数可以随时调用,
//
// 经典闭包1:
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i) //5,5,5,5,5
},500)
}
// 如果想输出0,1,2,3,4那该怎么做呢?把var 改成let 或者里面写一个自执行函数
for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log(i) //5,5,5,5,5
},500)
})(i)
}
经典闭包2:
function add(){
var i=1;
return function(){
console.log(++i);
}
}
var num =add();
num();
num();
网友评论