标签:构造器 存在 listen efi tee load img type 图片
JS的变量提升主要从两方面来说,变量定义、函数声明,二者都是把对应的内容放到对应定义时的执行环境的顶部,然后JS再开始往下依次解释(注意:函数声明的提升权重大于变量提升)
// 函数b和函数c的声明被放到了顶部
// var a
// var c
console.log(a) // undefined
console.log(c) // 此时输出的是函数c
var a = 100
var c = 100
b() // 我是b函数
function b() {
console.log(‘我是b函数‘)
}
function c() {
console.log(‘我是c函数‘)
}
var i, a
for (i = 0; i < 10; i++) {
// 利用闭包延长了每次i的生命周期
;(function (i) {
a = document.createElement(‘a‘)
a.innerHTML = i + ‘<br>‘
a.addEventListener(‘click‘, function (e) {
e.preventDefault()
alert(i) // 自由变量,要去父作用域获取值
})
document.body.appendChild(a)
})(i)
}
// 封装私有变量
function isFirstLoad() {
var _list = [] // 私有变量
return function (id) {
if (_list.indexOf(id) >= 0) {
console.log(‘已经存在此状态‘)
return false
} else {
_list.push(id) // _list 自由变量
console.log(‘保存状态成功‘)
return true
}
}
}
var firstLoad = isFirstLoad()
firstLoad(10) // true
firstLoad(10) // false
firstLoad(20) // true
firstLoad(20) // false
前端JavaScript基础面试题01_JS基础知识(中)作用域、闭包
标签:构造器 存在 listen efi tee load img type 图片
原文地址:https://www.cnblogs.com/cqkjxxxx/p/13336464.html