不容忽视的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对象只有三种状态: ...
随机推荐
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码 ...
- Dynamics CRM 报表导出EXCEL 列合并问题的解决方法
CRM中的报表导出功能提供了多种格式,excel就是其中之一,这次遇到的问题是导出后打开excel列明合并的问题,具体如下看着相当不美观,物料名称字段占了AB两列,品牌占了CD两列等等. 该问题的源头 ...
- 【一天一道LeetCode】#371. Sum of Two Integers
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Calcula ...
- 【一天一道LeetCode】#292. Nim Game
一天一道LeetCode 从今天开始,调整规律,不按顺序做,从easy开始! 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 ...
- ubuntu文件管理常用命令
1.关闭防火墙:ufw disable 2.以.开头的表示隐藏文件 3..和..分别代表当前目录以及当前目录的父目录 4.显示当前用户所在目录pwd 5.touch创建空文件 6.mkdir创建新目录 ...
- 《java入门第一季》之集合toString源码解析
代码: Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add(" ...
- Socket编程实践(11) --epoll原理与封装
常用模型的特点 Linux 下设计并发网络程序,有典型的Apache模型(Process Per Connection,PPC), TPC(Thread Per Connection)模型,以及 se ...
- R12中注册客户化应用为多组织应用
Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...
- 小强的HTML5移动开发之路(14)——Video标签详解
来自:http://blog.csdn.net/dawanganban/article/details/18180605 在前面的小强的HTML5移动开发之路(5)--制作一个漂亮的视频播放器中制作了 ...
- 【一天一道LeetCode】#72. Edit Distance
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...