一次性理清JavaScript变量等高难度面试问题

news/2024/7/2 23:10:18
主要是解决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);

等。

解决这些问题的关键是:不要想当然,动手一步一步模拟执行顺序,模拟变量提升情况

第二种 面向对象问题或高阶函数( 等待更新 )


http://lihuaxi.xjx100.cn/news/244534.html

相关文章

数据结构笔记--二叉查找树概述以及java代码实现

一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递归定义,二叉查找树的代码实现也基本上都是使用递归的函数,二叉查找树的平均深度是O(logN). 因…

【每天一点点】

>>>html 使用使用<a href"URL">ba bla bla</a>定义资源位置&#xff0c;使用<a href"#name"></a>跳转到name锚所在的位置&#xff1b;>>>eclipse的注释快捷键 方法一&#xff1a;使用Ctrl/快捷键&#xff0c;使…

华为云家庭视频监控帮你一起守护家

设想一下&#xff1f;离开家了突然想起家里空调没关怎么办&#xff1f;家里没人有陌生人入侵了怎么办&#xff1f;不在家家里老人出事了怎么办&#xff1f; 不用愁&#xff0c;总有办法解决的&#xff0c;这些日常生活中极容易遇到的事情&#xff0c;没有分身术的时候&#xff…

js实现轮播图功能

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>路人女主无缝轮播图片</title> </head> <body> <div class"box" id"box&quo…

Xamarin SimplerCursorAdapter 适配器(三)

SimplerCursorAdapter的使用步骤&#xff1a; 1、根据需要定义ListView每行所实现的布局。 2、实现数据表的查询操作&#xff0c;获取ICursor对象。 3、根据SimplerCursorAdapter对象。 4、将ListView绑定到SimplerCursorAdapter上…

Spark shuffle调优

Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区&#xff0c;从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就…

在SpringBoot项目中使用redis简单用法(一)

基本准备 首先肯定是需要将Redis的包和Redis链接配置好 这里以maven作为项目构建工具&#xff0c;所以直接在POM文件中引入的Redis依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r…

一个经典例子让你彻彻底底理解java回调机制

以前不理解什么叫回调&#xff0c;天天听人家说加一个回调方法啥的&#xff0c;心里想我草&#xff0c;什么叫回调方法啊&#xff1f;然后自己就在网上找啊找啊找&#xff0c;找了很多也不是很明白&#xff0c;现在知道了&#xff0c;所谓回调&#xff1a;就是A类中调用B类中的…