Javascr ipt中this指向问题
记得初学 Javascr ipt 时,其中 this 的指向问题曾让我头疼不已,我还曾私自将其与闭包、原型(原型链)并称 JS 武林中的三大魔头。如果你要想在 JS 武林中称霸一方,必须将这三大魔头击倒。个人认为在这三大魔头中,this 指向问题的武功最菜(难度最低)。俗话说柿子捡软的捏,那我们就先从 this 指向问题下手。
先记住攻克 this 指向问题的口诀(前辈们的总结):哪个对象调用函数,函数里的 this 就默认指向哪个对象(注意 this
前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件。就是这个问题让我整整调了一个下午。最后还是下班回家,上网查资料才知道怎么解决的。 (PS:之前也在《jQuery基础教程》第四版中看过讲循环绑定处理程序的内容,当时估计也没怎么用心看,所以没记起来。)
大神要是知道这类情况,可以关掉窗口,写这些主要是给像我一样的小白看的。谢谢!
先贴上错误的例子让大家看看。(例子里面用到jQuery,请导入jQuery库)
代码如下:
<!DOCTYPE html PUBLIC “-/
( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的我根本无法理解它想表达个什么意思!但是作为一只好奇的菜鸟又很想知道“闭包”到底是个什么东西!所以最终找到了传说中的“度娘”帮忙!还算有了一点小小的理解!
个人见解:在函数体内定义另外的方法函数,而这个方法函数被函数以外的变量引用,这时就形成了闭包!
可能这样的理解也太抽象了,并不是那么简单易懂!实例吧:
代码如下:[removed]
function A(){ var S=0; function B(){ alert
在JS中有全局作用域和函数作用域,而在Nodejs中也自己的作用域,分为全局作用域(global)和模块作用域。
js作用域:
以前学js的时候我们的全局对象是window,如:
var a = 10;
console.log(window.a);
我们定义的全局变量默认是给window添加一个属性或者方法。
function fn(){
var num = 22;
}
console.log(num);
报错,因为num是在函数中定义的,在函数外部是访问不了函数内部的变量的,虽然可以通
经测试未写成闭包形式的在同一个文件中或者不同的 js 文件中定义的同名函数,调用时会执行后面一个定义的函数。即使这样写也会执行后面一个即会弹出2:
[removed]
function t(){
alert(1);
}
t();
function t(){
alert(2);
}
[removed]
另外,定义的变量与css样式也是以后面的为准。
但是对于函数,经测试这样写却会执行前面的函数直接量即弹出1,暂时不知道是为什么。
[removed]
var t = f
经测试未写成闭包形式的在同一个文件中或者不同的 js 文件中定义的同名函数,调用时会执行后面一个定义的函数。即使这样写也会执行后面一个即会弹出2:
[removed]
function t(){
alert(1);
}
t();
function t(){
alert(2);
}
[removed]
另外,定义的变量与css样式也是以后面的为准。
但是对于函数,经测试这样写却会执行前面的函数直接量即弹出1,暂时不知道是为什么。
[removed]
var t = f
代码如下: function f1(){ var n = 999; nAdd = function(){ n += 1; } function f2(){ alert(n); } return f2; } 这里的闭包是f1,封闭了一个变量n和一个函数f2。 我们先无视nAdd,尽量保持原貌重写一下这个函数。 代码如下: function f1(){ var n = 999; var f2 = function(){ alert(n); }; return f2; } var result =