-
说一下对变量提升的理解
- JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
- JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
-
说明this几种不同的使用场景
-
第一种情况: 全局下this
function fn1 (){ return this } console.log(fn1()) //window
注意: 在严格模式下 “use strict” this是undefined
-
第二种情况:构造函数
-
当函数作为构造函数调用时,this代表new出来的对象;
-
如果没有使用new而是直接调用函数,this===window;
-
不仅仅是构造函数的prototype,即便是在整个原型链中,this代表的也是当前对象的值;
function Foo (name){ this.name = name ; console.log(this) } var foo = new Foo('Emma'); //Foo {name: "Emma"} Foo() //window
-
-
第三种情况:函数作为对象的一个属性
-
函数作为对象的一个属性被调用的时候,this指向的是该对象;
-
函数作为对象的一个属性被赋值到另一个变量中调用,this===window
扫描二维码关注公众号,回复: 12274509 查看本文章var obj = { x :10, fn:function(){ console.log(this) } } obj.fn() //当前对象 var newFn = obj.fn; newFn() //window
-
-
第四种情况: 函数用apply() call() bind()调用时,this取得是传入的对象
function fn() { console.log(this) } fn() // window fn.call({ a:100}) // {a:100} 和 call 同理的还有 apply bind
-
-
创建10个
<a>
标签,点击的时候弹出来对应的序号var i for (i = 0; i < 10; i++) { (function (i) { var a = document.createElement('a') a.innerHTML = i + '<br>' a.addEventListener('click', function (e) { e.preventDefault() alert(i) }) document.body.appendChild(a) })(i) }
-
如何理解作用域
- 《JavaScript权威指南》中,对作用域的描述为:
- 变量作用域:一个变量的作用域(scope)是程序源代码中定义这个变量的区域
- 《你不知道的Javascript·上卷》中对作用域的描述则为:
- 负责收集并维护由所有生命的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。
- 简单来讲,作用域(scope)就是变量访问规则的有效范围。
- 作用域外,无法引用作用域内的变量;
- 离开作用域后,作用域的变量的内存空间会被清除,比如执行完函数或者关闭浏览器
- 作用域与执行上下文是完全不同的两个概念。我曾经也混淆过他们,但是一定要仔细区分。
- 《JavaScript权威指南》中,对作用域的描述为:
-
实际开发中的闭包应用
-
闭包实际应用中主要用于封装变量,收敛权限
function isFirstLoad() { var _list = []; return function(id) { if(_list.indexOf(id) >= 0){ return false; } else { _list.push(id); return true; } } } // 使用 var firstLoad = isfirstLoad() firstLoad(10) // true firstLoad(10) // false firstLoad(20) // true
-
JS作用域和闭包核心面试题
猜你喜欢
转载自blog.csdn.net/qq_39208971/article/details/108234939
今日推荐
周排行