匿名函数没有自己的this,因此,在构造对象中调用全局函数时,可以省去保存临时this,再将其传入全局函数这一步:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>匿名函数的this</title>
</head>
<body>
<script>
const Tom = {
name:'Tom',
age:null,
setAge: function () {
let _this = this; // 将Tom保存在_this变量里
setTimeout(function(){
// 因为是在全局函数里,所以这里的this是window
console.log(this); // 输出:window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
// 这里的_this才是Tom,所以用_this才能调用Tom的age属性
_this.age = 15;
console.log(_this) // 输出: {name: "Tom", age: 15, setAge: ƒ}
}, 1000);
}
};
Tom.setAge();
setTimeout(() => {
console.log(Tom.age);
}, 3000);
const Rose = {
name: 'Rose',
age: null,
setAge: function () {
setTimeout(() => { // 匿名函数没有this,因此匿名函数中的this是他所在函数的上一层,setTimeout()的上层是Rose
// 因此这里的this是Rose,可以调用Rose
this.age = 16;
console.log(this); // 输出:{name: "Rose", age: 16, setAge: ƒ}
}, 1000);
}
};
Rose.setAge();
setTimeout(() => {
console.log(Rose.age);
}, 3000);
</script>
</body>
</html>
js和其他编程语言相对比较随意,首先来理解下函数基本概念:函数声明、函数表达式、匿名函数。函数声明和函数表达式区别有哪些?
无论你在什么时候读代码,您都必须注意到匿名函数。有时它们被称为 lambda,有时是匿名函数,不管怎样,我认为他们是不好使用的。匿名函数是一种在运行时动态声明的函数。它们之所以被称为匿名函数是因为不同于普通函数,它们并没有函数名 。
突然,看到附件选择的方法,人家是设置的this.fileUrl成功的。比对下,什么区别。这就是JS中匿名方法的this指向问题,function的声明方式,this指向的是本身,父级的变量都无法访问。
我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。
在前端面试中面试官基本都会问到什么是匿名函数、什么是闭包函数。匿名函数顾名思义就是没有名字的函数,通常我们所写的函数都是这样的:
立即执行函数是基于匿名函数实现的,也没有函数名,会在定义后立即执行;闭包是有权访问另一个函数作用域中的变量的函数。匿名函数、立即执行函数只要满足 有权访问另一个函数作用域中的变量 这一个条件,就成了闭包。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!