A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一. 题目

改造下面的代码,使之输出0 - 9,写出你能想到的所有解法。

首先作为前端开发者,你起码得知道下面的代码会输出什么,强烈建议自己动手试试能写出多少种解法。

二. 解法风暴

console.log(i)在执行时,会按照词法作用域来取得循环条件中的变量 i的值,本题的基本思路实际上就是如何在console.log语句和for循环条件之间添加(或修改)代码来隔离变量 i的词法作用域。

解法一:最容易想到的方法——ES6块级作用域

解法二:大多数前端曾接触过的第一种方法——IIFE(立即执行函数)

解法三:比较优雅的做法——setTimeout可以接收多个参数

解法四:利用函数方法bind为setTimeout传入预设参数

解法五:利用禁术with
with的作用是延长作用域链会在词法作用域末端继续添加参数定义,在正式开发中通常是禁用的。下图右侧的scope一栏中就可以看到local作用域之上又多了一个with引入的作用域,其中就包含传入的i值。


解法六:利用Promise传递决议结果来隔离作用域

解法七:利用try...catch来隔离作用域

解法八:浏览器环境下setTimeout第一个参数可以为undefined(node.js中会报错)

解法九:篡改console.log

解法十:不按套路出牌的骚操作

————————————————
原文链接:https://blog.csdn.net/devcloud/article/details/102517623

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马