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

判断对象是否为数组/对象的元素/属性:

格式:(变量 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面试题的更多相关文章

  1. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  2. 所在实习公司的JS笔试题

    在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...

  3. 有点难度的JS面试题

    自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...

  4. Node.js面试题之2017

    译者按: 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进. 原文: Node.js Interview Question ...

  5. vue.js面试题整理

    Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...

  6. 一道JS面试题引发的血案

    刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...

  7. js经典试题之常用的方法

    js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...

  8. js经典试题之运算符的优先级

    js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...

  9. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

随机推荐

  1. 剑指Offer--图的操作

    剑指Offer–图的操作 前言   企业笔试过程中会涉及到数据结构的方方面面,现将有关图的深度优先搜索与广度优先搜索进行整理归纳,方便日后查阅.   在已做过的笔试题目中,可用DFS解决的题目有: & ...

  2. 剑指Offer——滴滴笔试题+知识点总结

    剑指Offer--滴滴笔试题+知识点总结 情景回顾 时间:2016.9.18 15:00-17:00 地点:山东省网络环境智能计算技术重点实验室 事件:滴滴笔试   总体来说,滴滴笔试内容体量不算多, ...

  3. [django]用日期来查询datetime类型字段

    有一个model的字段是 DateTimeField,我现在要具体查询某一天date的数据,应该怎么用orm来查询呢? 指定年月日 YourModel.objects.filter(datetime_ ...

  4. Android开发优化之——使用软引用和弱引用

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 这里重点介绍一下软引用和弱引用. 如果 ...

  5. Java数据类型及类型转换

    http://blog.csdn.net/pipisorry/article/details/51290064 java浮点数保留n位小数 import java.text.DecimalFormat ...

  6. Ubuntu 15.10下Qt5的安装实战

    写照篇博客的目的就是因为最近要使用Qt,但是由于本人的系统是Ubuntu的,而网上大部分的讲解全是基于Windows的,所以就花费一些时间总结了一下我的安装过程,当然也是也为了能帮助到更多的博友. 第 ...

  7. iOS中分段控制器与UIScrollView结合使用

    指定根视图: // 设置window的根视图控制器 self.window.rootViewController = [[UINavigationController alloc] initWithR ...

  8. K-均值聚类算法(K-means)

        K-means是一种无监督的学习,将相似的对象归到同一个簇中.可以将一批数据分为K个不同的簇,并且每个簇的中心采用簇中所含样本的均值计算而成.     K-means算法的K值需要由用户指定, ...

  9. [信号处理技术]关于EMD的产生

    通俗易懂,有助于理解EMD和HHT,就原封不动的搬过来了. 原文链接:关于EMD的产生 自傅里叶变换与频谱分析技术产生,人们得以从另外一个角度观察时域信号,信号里各个点的密集程度,得以确定性地度量.之 ...

  10. 关于oracle表名区分大小写的问题

    oracle不是区分大小写的,是建表的时候是没有去掉双引号.   CREATE TABLE TableName(id number); //虽然写的时候是有大写和小写,但是在数据库里面是不区分的.   ...