JS基础面试题——作使用域及闭包

  • 时间:2018-07-25 23:23 作者:浮生偷闲 来源:浮生偷闲 阅读:52
  • 扫一扫,手机访问
摘要:内容导读这次主要使用例子解释一下什么是作使用域,什么是自由变量,什么是闭包,由于使用一句话概括实在是概括不出来,欢迎有大神可以一句话解释的在评论区评论一下,十分感谢。这次主要使用例子解释一下什么是作使用域,什么是自由变量,什么是闭包,由于使用一句话概括实在是概括不出来,欢迎有大神可以一句话解释的在评

内容导读

这次主要使用例子解释一下什么是作使用域,什么是自由变量,什么是闭包,由于使用一句话概括实在是概括不出来,欢迎有大神可以一句话解释的在评论区评论一下,十分感谢。

这次主要使用例子解释一下什么是作使用域,什么是自由变量,什么是闭包,由于使用一句话概括实在是概括不出来,欢迎有大神可以一句话解释的在评论区评论一下,十分感谢。

1. 说一下变量提升的了解

以下两种情况下会进行变量提醒

  1. 变量定义
  2. 函数申明(要区分函数表达式和函数申明)

2. 说明this几种不同的用场景

  1. 在构造函数中用
  2. 作为对象属性时用
  3. 作为普通函数时用
  4. call,apply,bind
pre class="brush:js;toolbar:false">var a = { name: 'A', fun: function() { console.log(this.name); }};a.fun(); //this === aa.fun.call({ name: 'B' }); //this === { name: 'B' }var fun1 = a.fun;fun1(); //this === window

3. 创立10个a标签,点击每个弹出对应的序号

  • 错误的例子:
pre class="brush:js;toolbar:false">// 在点击a标签时每个输出的都是10var i, a;for (i = 0; i < 10; i++) { a = document.createElement('a'); a.innerHTML = i + '
'; a.addEventListener('click', function(e) { e.preventDefault(); alert(i); //自由变量,会从父元素找i,点击时,其实i已经执行完变成了10 }); document.body.appendChild(a);}
  • 用闭包改进的例子:

当然,在ES6中可以用let

pre class="brush:js;toolbar:false">var i;for (i = 0; i < 10; i++) { (function(i) { // 函数作使用域 var a = document.createElement('a'); a.innerHTML = i + '
'; a.addEventListener('click', function(e) { e.preventDefault(); alert(i); }); document.body.appendChild(a); })(i);}

4. 如何了解作使用域

  1. 自由变量
  2. 作使用域链,及自由变量的查找,找不到逐级向上找
  3. 闭包的两个场景:
  4. 3.1 函数作为变量传递
  5. 3.2. 函数作为返回值

5. 实际开发中闭包的应使用

pre class="brush:js;toolbar:false">// 判断一个数字能否出现过function isFirst() { var _list = []; return function(id) { if (_list.indexOf(id) >= 0) { return false; } else { _list.push(id); return true; } };}var first = isFirst();first(10);first(10);first(20);
  • 全部评论(0)
最新发布的资讯信息
【系统环境|服务器应用】Spring02——实现动态代理商阻拦器(2018-10-20 23:18)
【系统环境|服务器应用】Spring01——SpringIoC容器(2018-10-20 23:17)
【系统环境|服务器应用】最大堆进阶:堆排序及其优化(2018-10-20 23:17)
【系统环境|服务器应用】【一文读懂】百度一下,背后可不只是简单的一下(2018-10-20 23:17)
【系统环境|服务器应用】注意!这5种搜索套路,让你资源搜索不求人(2018-10-20 23:17)
【系统环境|服务器应用】Java线程池---Executor框架源码深度解析(2018-10-20 23:16)
【系统环境|服务器应用】X.509证书认证模式简介(2018-10-20 23:16)
【系统环境|服务器应用】Spring Security权限框架理论与实战(二)-常用权限阻拦器(2018-10-20 23:16)
【系统环境|服务器应用】做程序员太辛苦了, 我想换行,我该怎样办? “敲一下回车。”(2018-10-20 23:16)
【系统环境|服务器应用】mysql中使用select的正确姿势你知道吗?(2018-10-20 23:16)
手机二维码手机访问领取大礼包
返回顶部