不容忽视的js面试题
1、全局变量和局部变量(变量提升和连等赋值问题)
(function() {
var a = b = 5;
})();
console.log(a);
console.log(b);
上面代码运行结果如下:

上面代码中声明了两个变量,a 使用关键字var声明的。代表它是一个局部变量。而b则是一个全局变量。调用在该作用域未声明的变量,是会报错的。而一个变量只声明,但未定义赋值的时候,才会是undefined。很明显,变量a在全局作用域未曾声明,并不存在,所以会报错!
首先连等操作符是从右向左赋值的,b = 5; var a = b; 变量a是用var进行声明并赋值的所以是局部变量, 变量b是未用var声明的变量在javscritp中是一个隐式全局变量。所以在外面consoloe.log(b) 是5, console.log(a) 报错 a is no defined.
2、数组求和
Array.prototype.sum = function () {
for (var sum = i = 0; i < this.length; i++)sum += parseInt(this[i]);
return sum ;
};
3、数组求最大值
Array.prototype.maxNum = function () {
for (var i = 0, maxValue = Number.MIN_VALUE; i < this.length; i++)parseInt(this[i]) > maxValue && (maxValue = this[i]);
return maxValue;
};
4、
var a = 100;
function test(){
var b = 2 * a;
var a = 200;
var c = a / 2;
console.log(b);
console.log(c);
}
test()
上面代码运行结果如下:

当全局变量和局部变量同名的时候,全局变量是不会主用于同名局部变量的作用域的。也就是说var a=100是不会作用于test这个函数中的。
引用:
1.全局变量和它的作用域
全局变量是指在程序开头的说明部分定义和说明的量。它的作用域分为两种情况:
(1)在全局变量和局部变量不同名时,其作用域是整个程序。
(2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。
2.局部变量和它的作用域
凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子程序。形式参数也只能在子程序中有效。因此也属于局部变量。局部变量的作用域分为两种情况:
(1)当外层过程序的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过琛。
(2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层局部变量名的作用域不包含此过程。
5、
console.log(0.1 + 0.2 === 0.3);
上面代码运行结果:false
6、
console.log(0 || "1" && 2);
上面代码运行结果:
7、
console.log(2 in [1,2]);
上面代码运行结果:false
关键字:in
判断对象是否为数组/对象的元素/属性:
当“对象”为数组时,“变量”指的是数组的“索引”;
当“对象”为对象是,“变量”指的是对象的“属性”。
var arr = ["a","b","2","3","str"];
var a= ("b" in arr);
var b= (4 in arr);
console.log(a);
console.log(b);
8、
var a=[1,2],b=[3],c=6;
function test(a1,b1,c1){
a1=[];
b1[0]=4;
c1=7;
}
test(a,b,c);
console.log(a);
console.log(b);
console.log(c);
上面代码运行结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJcAAABKCAIAAAA5XVHfAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADGElEQVR4nO2cPW7qQBRGvSPqVGwgO0CKixTZAAV9Gl5FgcQOkCLRoUiwg6eIJFRpaJAIIYUXcTPjn8HEY8aGG6O5fEdWZE1mSOTjb2zjqwkI+E/g6gA8ABYlAIsSgEUJwKIEYFECnBZn49eg/zFzdfsDPp/ub2/aant4+nZ0nfaoE9LwzdHNzo66oR7e6dGXo+v/x3b8L91Pdo6eDPBZ3K7C+WYwWg62rp78KItufxQrnO70z9MsqoGLeGcxou6zo7Pme3Lnl8XZWPtTcQzf05b1fNnSXlVA9Za0WxuJItMS9JPzIMqfEOpjW/Oo8DcNVS0mnGzR8PVMnZGrE3lncbtqjTd0eLjjCTYvLzrSmI3ahNmcnGuMXBFv2qLKYqVP8Mri/igbMUm8CgGyNaozYLRaF/ffP4L4zNjvlNKoRR1E93UxxieL6ij3X/dbesT3qcpha8xJ0kk1wlKjSrzzjqk5izUUkk8WD6c7pSQJUz5VBmtjZlHlWJ0EuaRqf4P50lxoyznb4ss/dT/5+GLvb6inkDyyaLQlGE/WadA+N6qApiFeHzo7iOYxqlpMHjPMtjC/UIe7fXs3+TwyVjEMS4aX4Y3Fv8MaXDtVLZajH++cWazNNVtM7mODqgqp1lN/kd3k4aZCEGvi6VM/uBywKAFYlAAsSgAWJQCLEoBFCcCiBGBRArAoAViUACxKgNOiFzVwlL2fcr1XavTr7DPhs+hDDRxlhU9Dt8WYpl4tnQmbRT9q4OKC0gXBohVPauBMrQYsFvGjBi5fRAqLBTypgftVdFOpzv9qLPpXA0fI4m+8qoEzwGJTNFoDVwIsnkzDNXAlXOdTP7gcsCgBWJQALEoAFiUAixKARQnAogRgUQKwKAFYlAAsSoDP4lv29rXWKhSAAx6LtZcQAazwWDTL3IGLwGFxR90eTUfpjFppsULACpPFXCXSMNSrV4ImYbKYuyhWXa8Q8MFhMVs9NgFZbB4ei/ulmKsUeQJumCyCiwKLEoBFCcCiBGBRArAoAViUACxKABYlAIsSgEUJwKIEYFECsCgBWJTAD299oiTI8xqtAAAAAElFTkSuQmCCAA==" alt="" />
9、事件循环
function printing() {
console.log(1);
setTimeout(function(){console.log(2)},1000);
setTimeout(function(){console.log(3)},0);
console.log(4);
}
printing();
上面代码运行结果如下:

浏览器有一个事件循环用于检查事件队列,处理延迟的事件。UI事件(例如,点击,滚动等),Ajax回调,以及提供给 setTimeout() 和 setInterval()的回调都会依次被事件循环处理。当调用 setTimeout() 函数时,即使延迟的时间被设置为0,提供的回调也会被排队。回调会乖乖地待在队列中,直到指定的时间用完后,它才开始执行动作。
因此,即使 setTimeout() 回调被延迟0毫秒,它仍然会被排队,并且直到函数中其他非延迟的语句被执行完了之后,才会执行。所以运行的结果是:1 4 3 2。
10、
var f = function g(){
return 23;
}
typeof g()
上面代码运行结果如下:

函数定义的方法有两种:(1)直接声明,比如 function g(){} (2) 匿名函数(表达式声明)比如:var f = function(){}
题目中的函数定义方法属于匿名函数,即右边的函数体赋值给了变量f,只有f() 才会调起函数,而右侧的函数体的g变量已经无法在函数体外进行访问,即g is not defined。
function g(){
return 'qqq'
}
var f = function g(){
return 23;
}
g();
上面代码运行结果如下:qqq
11、delete
(function(x){
delete x;
return x;
})(1)
上面代码运行结果如下:1
delete的删除机制:delete一般用来删除对象的属性和方法的,不能够删除函数传递的参数。
delete无法删除用var、let、const声明的变量。
不容忽视的js面试题的更多相关文章
- 10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
- 所在实习公司的JS笔试题
在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...
- 有点难度的JS面试题
自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...
- Node.js面试题之2017
译者按: 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进. 原文: Node.js Interview Question ...
- vue.js面试题整理
Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...
- 一道JS面试题引发的血案
刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...
- js经典试题之常用的方法
js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...
- js经典试题之运算符的优先级
js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...
- js经典试题之ES6
js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...
随机推荐
- 【一天一道Leetcode】#190.Reverse Bits
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 我的个人博客已创建,欢迎大家持续关注! 一天一道le ...
- Dynamics CRM 电子邮件服务器配置文件Advanced配置中关闭SSL
在新建电子邮件服务器配置文件时Advanced中的Use SSL for Incoming/Outgoing Connection默认都是启用的而且无法编辑,启用SSL当然是为了安全的考虑,但当客户的 ...
- Android开发学习之路--Android Studio项目目录结构简介
既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...
- SDL2源代码分析8:视频显示总结
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- Android初级教程理论知识(第四章内容提供器)
之前第三章理论知识写到过数据库.数据库是在程序内部自己访问自己.而内容提供器是访问别的程序数据的,即跨程序共享数据.对访问的数据也无非就是CRUD. 内容提供者 应用的数据库是不允许其他应用访问的 内 ...
- JAVA中的静态成员
//Java中的静态成员 /* *静态的成员变量是属于类的,不属于某个对象,是共享的. * 访问时可以用类名.静态属性直接访问,也可以用对象.访问,后者不提倡. * 静态的成员方法只能访问静态的成员 ...
- 【翻译】Ext JS最新技巧——2016-3-4
原文:Top Support Tips Kevin Cassidy:Grid水印 Ext JS的Grid是一个便于在布局中显示信息的伟大工具.有些用户可能会希望将这些信息打印为会议资料或宣传材料,而且 ...
- 《java入门第一季》模拟用户登陆注册案例集合版
需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...
- 【一天一道LeetCode】#86. Partition List
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- java Domj4读取xml文件加强训练案例
需求:给出一段xml文件.要求按照鸳鸯输出. xml文件代码如下: <?xml version="1.0" encoding="utf-8"?> & ...