闭包写法
var obj = function () {
var name = 'js';
var dofun = function () {
};
return can = (function () {
// console.log(obj);
return name;
})();
}
console.log(obj(), '1');
类写法
class OBJ {
constructor() {
this.name = 'js';
}
can() {
return this.name;
}
do() {
}
}
var ob=new OBJ()
console.log(ob.can(), '2');
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
var x = xx;
这个表达式做了什么?他是先在内存中声明了一个变量,此时变量未作任何处理,所以值为undefined,然后会把右边的结果赋值给左边的变量。用你的这个例子来讲,先在内存中声明了一个变量obj,然后看右边,右边是一个对象,所以会在堆内存中开辟一个空间,保存该对象,读取到
name:'js'
的时候会为对象的name属性赋值'js',当读取到下一行的时候,因为can属性所对应的是一个立即执行函数,所以会先得到函数的值,再赋值给can属性,那么这个函数里面做了什么呢?这个函数首先打印了obj,此时obj刚刚声明,还未被赋值,所以为undefined,所以读取下一行obj.name
的时候抛出错误。