一次性理清JavaScript变量等高难度面试问题
主要是解决JavaScript中比较难懂的部分,当然了,这部分经常在面试题中露面,这篇文章主要是讲解解题思路,对新手会有很大帮助(如果你仔细看的话)。书籍方面,我看的是《你不知道的javascript》,精髓就在里面喽。文章会持续更新( 如果能看到比较刁钻的题目的话, 也欢迎大家将自己遇到的
异常难于理解
的JavaScript
题目分享出来喔 )
第0种 解析顺序
function a() {b = function () {console.log(1)}return this;}var b = function () {console.log(2)}function b() {console.log(3)}b();a().b();b();
1.首先,你要明白的是3永远不可能打印出来。这涉及到函数的声明方式和执行顺序问题。
直接用function的方式声明的函数,函数可以在function声明之前被调用,这说明在代码运行之前就已经调用了。
再次声明的函数var b
会替代原有的函数b
2.第二点: 第一个函数中的this指向。一个点:函数中的this是在运行时候决定的,而不是函数定义时
, 具体就看谁调用了this.在第一个函数中,没有调用对象,在浏览器中,this就指向window
3.第三点: 还是第一个函数中,不使用var
标识符直接定义的变量都属于全局变量
,也就是说第一个函数中的b
是挂载到window
上的。
第1种 变量提升
(function(){a = 5;alert(window.a);var a = 10;alert(a);
})();
喜闻乐见!看见一堆的变量a
就知道了,这是变量提升
的问题了,只需要自己模拟出执行顺序
就行了.
等同于:
var a; // 第一步:变量提升
a = 5; // 后面的就直接拿上来
alert(window.a);
a = 10;
alert(a);
同类型题目:
var a=1;
function test(){console.log(a);var a=1;
}
test();
看见var
就把它提升到最前面就行了,一样画瓢解决:
var a;
a = 1;function test() {var a;console.log(a);a = 1;
}
还有同类型的题目一样可以依葫芦画瓢解决:
var foo = 'hello';(function (foo) {console.log(foo);var foo = foo || 'world';console.log(foo);})(foo);console.log(foo);
等。
解决这些问题的关键是:不要想当然,动手一步一步模拟执行顺序,模拟变量提升情况
第二种 面向对象问题或高阶函数( 等待更新 )
一次性理清JavaScript变量等高难度面试问题相关推荐
- 高难度的c语言程序例子,高难度脑筋急转弯分享
脑筋急转弯是近年来兴起的一种十分受欢迎的智力与思维灵敏度的言语形式.下面学习啦小编为大家整理了高难度脑筋急转弯,希望对大家有帮助. 高难度脑筋急转弯[一] 1. 给一个瞎子52张扑克牌,并告诉他里面恰 ...
- 【通知】2020年有三AI-CV夏季划升级,更多项目,更高难度,更加落地
有三AI CV夏季划发布于2019年6月10日,是有三亲自带领的师徒学习季划,为已经在计算机视觉领域,但是项目经验欠缺,落地能力较差的朋友准备.2020年6月20日起将进行升级,增加更多的项目,更高的 ...
- JavaScript 变量提升
JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 这几天在刷题的过程中 ...
- 思迈特软件Smartbi:10分钟教会你制作高难度的数据地图!
在数据可视化中,地图可视化是高频应用的一种.我们在一些新闻报道和商业杂志上,会经常看到运用地图来分析展示商业现象,这样的利用地图来反映和分析数据的形式叫数据地图. 数据地图可以最直观的表达出数据之间的 ...
- 如何在JavaScript中使用高阶函数
将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被称为高阶函数. JavaScript可以接受高阶函数.这种处理高阶函数的能力以及其他特点,使JavaScript成为非常适合函数式编程的 ...
- 【木头Cocos2d-x 029】Lua篇(第04章):来点高难度的,获取Lua表结构数据
[木头Cocos2d-x 029]Lua篇(第04章):来点高难度的,获取Lua表结构数据 只是获取一个全局变量什么的太没意思了,今天我们来玩个高难度的--获取Lua表结构的数据. (旁白:O O!我 ...
- JavaScript 变量
变量是存储信息的容器. 实例 var x=2; var y=3; var z=x+y; 亲自试一试 就像代数那样 x=2 y=3 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 2). ...
- javascript变量声明 及作用域
javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...
- 使用JavaScript变量需要注意哪些语法细节?
使用JavaScript变量需要注意哪些语法细节?JavaScript在很多地方经常会涉及到,尤其是JavaScript变量这方面,在使用变量时,还有一些值得注意的语法细节,下面进行详细讲解. 使用J ...
最新文章
- C++实现动态顺序表
- ab的压力测试(转)
- python嵌套字典代码_python – 尝试在嵌套字典中查找唯一值的总和. (见例子!)
- java用法_Java 习惯用法总结
- 已知序列求蝶形运算_(数字信号处理选择题.doc
- Spring AOP示例教程 - Aspect,Advice,Pointcut,JoinPoint,Annotations,XML Configuration
- perl abs函数
- Jmeter(三十八)while控制器实现ssh三次重连
- 综合项目之闪讯破解(一)之 闪讯拨号用户名核心算法
- MacBook突然没了声音
- 2行Python给图片加水印,太强了!
- BugkuCTF –备份是个好习惯
- 天下谁人不识君,体面的礼品
- Springboot上传视频到阿里云(视频点播)和aliyun-java-sdk-vod依赖报红问题
- FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM
- Android动态修改icon
- [激光原理与应用-40]:《光电检测技术-7》- 常见光干涉仪及其应用
- 微型计算机原理与应用实验指导书,微机原理与应用实验指导书-20180316.doc
- 关于AnyChat录像解决方案的几张原理图
- mac桌面文件删除怎么恢复?别急,有办法!