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. qq侧滑

    上一篇博客带大家实现了:Android 自定义控件打造史上最简单的侧滑菜单 ,有兄弟看了以后说,你这滑动菜单过时了呀~QQ5.0的效果还不错~~嗯,的确,上一篇也承诺过,稍微修改上一篇的代码,实现QQ ...

  2. [Python]程序性能分析

    有些脚本发现比预期要慢的多,就需要找到瓶颈,然后做相应的优化,参考A guide to analyzing Python performance,也可以说是翻译. 指标 运行时间 时间瓶颈 内存使用 ...

  3. Dynamics CRM 2015Online Update1 new feature之 通过业务规则清空字段的值

    自2013引入业务规则后很多的功能就不需要通过javascript来实现,业务人员直接通过配置就能解决.那随着版本的更新业务规则的功能也越来越强大,从之前很单纯的逻辑到后面的if..else,相信后面 ...

  4. div效果很好的遮盖层效果

    [html] view plaincopyprint? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  5. UNIX环境高级编程——线程和信号

    每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变.这样如果一 ...

  6. 精通CSS+DIV网页样式与布局--CSS段落效果

    在上一篇博文中,小编主要详细的介绍了CSS是如何控制文字的显示效果,随着需求的不断变更,那么我们如何对段落进行相关操作,以达到我们想要的效果呢,接下来,为了需要,小编继续来完善CSS对段落的控制的显示 ...

  7. 轻松学习Asp.net中的控件

    C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件 ...

  8. Linux IPC实践(1) -- 概述

    进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...

  9. Credit Summaries & Importing External Credit Exposure

    In this Document   Goal   Solution APPLIES TO: Oracle Order Management - Version 11.5.10.2 to 12.1.3 ...

  10. html5学习之旅-html5的简易数据库开发(18)

    实际上是模拟实现html5的数据库功能,用键值对的方式. !!!!!!废话不多说 ,代码 index.html的代码 <!DOCTYPE html> <html lang=" ...