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声明的变量。

最新文章

  1. POJ 1979 题解
  2. 快速排序算法 java 实现
  3. python中函数接收多余参数
  4. Android Monkey 压力测试 介绍
  5. js中setTimeout()的使用bug
  6. sqlite与android交互 (封装)
  7. http 报文 - 转
  8. 为什么for in循环不适合用于数组
  9. Excel下用SQL语句实现AVEDEV函数功能
  10. 微信消息处理JAXP-sax解析
  11. Android浏览图片,点击放大至全屏效果
  12. [模拟炉石](一)让游戏过程显示到cocos2d中
  13. java.lang.OutOfMemoryError: unable to create new native thread(转)
  14. Android支付接入(七):Google In-app-Billing
  15. 文本分类实战(四)—— Bi-LSTM模型
  16. [Kubernetes]如何使用yaml文件使得可以向外暴露服务
  17. MySQL的用户的创建以及远程登录配置
  18. [安全]appscan 使用代理抓取其他客户端的请求
  19. JQuery中的$.getScript()、$.getJson()和$.ajax()方法
  20. 切片对象的demo

热门文章

  1. 基于V4L2摄像头采集图片程序设计
  2. java的四种引用类型
  3. UNIX网络编程——线程池模式比较(ICE线程池模型和L/F领导者跟随者模式)
  4. java编程小记
  5. 1049. Counting Ones (30)
  6. Spring中Bean多种实现切换方案
  7. Dynamics CRM2013 注释中的内容无法正常显示问题
  8. Mybatis逻辑分页原理解析RowBounds
  9. OJ题:字符串分隔
  10. DesignModeler&amp;nbsp;GestureRecgin…