马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

面试题知识题-作用域

[复制链接]
查看3084 | 回复3 | 2017-1-11 23:11:02 | 显示全部楼层 |阅读模式
很久没发教程了。年会已开,收获满满,又有时间吹吹牛,装装逼了。
今天有同事问我一个问题,可以说是作用域链的知识吧。然后下班在地铁上看掘金的文章的时候看到也有人出了这方面的文章,那么咱们便来看看这道面试题。
[JavaScript] 纯文本查看 复制代码
	   /**
	    * 									装逼从点滴开始,从现在开始
	    * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
	    * │Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
	    * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
	    * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
	    * │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
	    * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
	    * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
	    * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
	    * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
	    * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
	    * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
	    * ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
	    * │ Ctrl│    │Alt │         Space         │ Alt│    │    │Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
	    * └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
	    */
	   
		var num = 20;
		function fn() {
		    var num = 200;
		    return function () {
		        console.log(num);
		    };
		}
		var f = fn();
		f(); // 输出 200


首先为什么输出上级作用域的200。而不是顶级作用域下的20。
有人说:上级作用域查找规则:看当前函数是在哪个作用域下定义的,那么它的上级作用域就是谁,和函数哪里执行没有任何的关系。
也有人说:看当前的函数是在哪个作用域下定义的,那么它的上级作用域就是谁。
还有人说:变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。
个人观点:js的函数作用域链都是从内部开始查找的。这里感觉和原型链实现继承都是同样的道理。
其实这里主要考察的是上级作用域查找规则。只要记住就行。个人赞同第二个观点。其实这个知识点也延伸了很多的种类,下一篇继续。




桂林一枝花 | 2017-1-11 23:12:36 | 显示全部楼层
自己占个楼
ibcadmin | 2017-1-12 17:40:29 | 显示全部楼层
好吊的样子...
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
min | 2017-1-12 17:42:50 | 显示全部楼层
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则