yuanwen http://www.jb51.net/article/32511.htm 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中     写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中. 最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑…
先看看最常见的一个问题: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> window.onload = function() { var a = document.getElementsByTagName('li'); for(v…
注意是要延迟执行的函数中的this哦!! //片段一 setTimeout("alert(this)", 1); // [object Window] //片段二 var obj = { say: function() { setTimeout("alert('in obj ' + this)", 0) } } obj.say(); //片段三 var obj = { say: function() { setTimeout(function(){alert(thi…
一. 立即执行函数 windows中有个name属性,name='' '' var 如果我们用var name 去声明,那就会改变windows中name的值(因为我们不是在函数作用域中声明的,所以会覆盖全局的值) 为了避免这种问题,通常我们写一个立即执行函数(可读性不高) const 同样,如果我们用const去声明,也会改变全局的name属性 我们把const声明写在大括号里面,就不会改变全局的name属性了 二. for循环 常见的for循环,console.log(i) 会输出10,wh…
一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号   (function(){alert(1);})(); 方式3.function前面加运算符,常见的是!与void   !function(){alert(1);}(); void function(){alert(2);}(); 二.立即执行函数的参数 可以给立即执行函数传递参数,例如   (function(who, when) {     cons…
// 最常用的两种写法 (function(){ /* code */ }()); // 老道推荐写法 (function(){ /* code */ })(); // 当然这种也可以 // 括号和JS的一些操作符(如 = && || ,等)可以在函数表达式和函数声明上消除歧义 // 如下代码中,解析器已经知道一个是表达式了,于是也会把另一个默认为表达式 // 但是两者交换则会报错 var i = function(){ return 10; }(); true && fu…
最近在学习JavaScript基础,在学习到面向对象编程时,学习到在JavaScript中实现模块化的方法,其中一个重要的点是如何封装私有变量. 实现封装私有变量的方法主要是: 使用构造函数 function StringBuilder() { var buffer = []; this.add = function (str) { buffer.push(str); }; this.toString = function () { return buffer.join(''); }; } //…
我们有时候会在自执行函数中看到这样的代码;(function(){ //我们的代码.. alert('Hello!'); })(); !(function(){ //我们的代码.. alert('Hello!'); })(); 加:或!的原因就是防止之前的代码没加分号,解析报错,我们的代码无法正常执行. var foo=function(){ //别人的代码 }//注意这里没有用分号结尾 //开始我们的代码... (function(){ //我们的代码.. alert('Hello!'); }…
匿名自执行函数:没有方法名的函数闭包:闭包是指有权访问另一个函数作用域变量的函数: 通过一个实例来解释: 从网上找到了一个案例,使用了for循环.匿名自执行函数.setTimeout. 案例1: var value1 =0,value2=0,value3=0; for(var i =1;i<=2;i++){ var i2 = i; console.log('i2==>',i2); (function(){ var i3 = i; console.log('i3==>',i3); setT…
js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的this指向对象的两种方法 可以使用对象冒充强制改变this的指向 将this赋值给一个变量,闭包访问这个变量 二.js闭包中的this 闭包中的this问题 之前的课程中讲过this是在运行时基于函数的执行环境来绑定的 全局函数中的this是window,而当函数作为某个对象的方法调用时,this就是指…