奥斯特洛夫斯基
2019-02-28
var a = 1;
foo();
在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
为什么我执行出来是undefined ,1
展开
8
88
钟凯
2019-02-28
关于this,Kyle Simpson有四条总结:
1. 由new调用? 绑定到新创建的对象。
2. 由call或者apply(或者bind)调用? 绑定到指定的对象。
3. 由上下文对象调用? 绑定到那个上下文对象。
4. 默认:在严格模式下绑定到undefined,否则绑定到全局对象。
例外:箭头函数不适用以上四条规则,它会继承外层函数调用的 this 绑定(无论 this 绑定到什么)。
展开
54
Rushan-Chen
2019-03-02
老师写的 "在别处定义了foo" 的意思是,这句话上下两部分的代码,不在同一个文件哒~
已经有同学贴了代码,是这样的:
```js
// 这是 foo.js 文件里的代码
var b = 2;
module.exports = function() { // 导出function
console.log(b);
console.log(a);
};
```
```js
// 这是test.js 文件里的代码
var foo = require("./foo.js"); // 引入function 为foo
var a = 1;
foo();
// node 执行 test.js 输出:
// -> 2
// -> ReferenceError: a is not defined
```
展开
2
26
郭鹏飞277
2019-02-28
老师,这个例子中的最后一行代码o.showThis(); // global
好像写错了,应该是C的实例o吧。
class C {
showThis() {
console.log(this);
}
}
var o = new C();
var showThis = o.showThis;
showThis(); // undefined
o.showThis(); // global
展开
作者回复: 哦哦 对的对的 我改一下
26
Thomas Cho
2019-02-28
我发现啊,不能只看文中代码结果,还是得自己跑一下,我看了文章后很是疑惑,跑了一下[[Environment]]下方那段代码后,打印出来的是 undefined和1。而不是2和error,不知为何
12
阿成
2019-03-16
这里先说声抱歉,之前可能误导了大家...
这里更新一下答案😅
@Rushan-Chen(虽然你并不能收到,希望极客时间赶紧增加@或者评论的功能,至少也展示个邮箱啊...不然找人都找不到,影响大家交流)
--------------分割线-------------------
文中,winter老师所说的“在别处定义”的意思,应该就是指在另一个模块中定义,即:
在另一个模块中定义...这样引入这个模块时,b就定义且初始化了,而且在这个模块中访问不到变量a...
// module a.js
import {foo} from 'b.js'
var a = 1
foo()
// module b.js
var b = 2;
export function foo () {
console.log(b); // 2
console.log(a); // error
}
其实,只要foo访问不到变量a就可以了嘛:
var b = 2;
function foo () {
console.log(b); // 2
console.log(a); // error
}
void function () {
var a = 1
foo()
}()
展开
10
Tony
2019-03-04
晕得一塌糊涂... 结合上一章的 let var 来看, js 这门语言居然还能火成这样, 世界实在是太奇妙了😥
5
zhangbao
2019-02-28
老师,您好,看完文章后,我有几个问题:
1. 代码段
```
class C {
showThis() {
console.log(this);
}
}
var o = new C();
o.showThis(); // 这里打印的 this 应该是 o 吗?
```
2. 介绍函数时提到了“方法”,定义是“在 class 中定义的函数”。但是举代码例子时,举了对象方法的例子。方法定义成“作为属性值的函数”,是不是更贴切一点呢?
3. 执行代码段
```
var a = 1;
foo();
// 在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
```
后,控制台,打印出的 b 是 undefined,a 是 1。跟老师描述的不一样,是我理解错了吗?
麻烦老师您解答一下,谢谢啦!
展开
1
4
study
2019-05-09
@奥斯特洛夫斯基
var和function,只是提升声明,代码提升完成是下面的代码:
var a,b;
function foo(){};
a = 1;
foo();
b = 2;
所以a的值为1,b为undefined
展开
3
Geek_376ed4
2019-03-01
// foo.js
var b=2;
module.exports = function() {
console.log(b);//2
console.log(a);//error
};
var foo = require("./foo.js");
var a=1;
foo();
展开
3
x
2019-06-24
es6中箭头函数是没有this的吧,所以他不能用作构造函数,他的this取决于外部环境
作者回复: 不是“没有this”,是“使用定义时的this”。
也不是“所以不能用作构造函数”,没有这个因果关系。
2
jacklovepdf
2019-06-19
按照老师的理解,应该少了一种,类的方法也是可以加async的,亲测有效。
2
DXYF2E
2019-12-27
觉得没看懂的同学,我觉得可以结合李兵老师的「浏览器工作原理与实践」中的第10、11节课一起阅读,可能理解程度会好一些
1
肉卷
2019-12-26
var a = 1;
foo();
在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
这个例子,改成如下例子应该更容易让人理解一些:
var a = 1
function test() {
var b = 2
test1()
}
function test1() {
console.log(2, a, b);
}
test()
展开
1
Geek_fc1551
2019-11-27
winter老师普通函数不是方法吗?
1
1
奋奋
2019-10-11
老师我这样对Reference的理解对吗???
showThis(); // Reference中的对象是global
(false || showThis)() // Reference由于运算而被解引用,
然后触发this机制[[thisMode]]私有属性的global取值
作者回复: 没错
1
Mr.杨
2019-04-04
默认this 就是普通方法的this
隐式this 变量接收方法后的this 会发生隐式指向错误
显式this 对象.方法的this
固定this call apply bind 的this
分为四种
1
存
2019-03-18
var a = 1;
foo();
在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
为什么我执行出来是2,1
展开
1
渭河
2019-03-12
var a = 1;
foo();
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // 输出并不是老师说的error而是1
}
为什么存在这种情况
展开
1
itgou
2019-03-09
var a = 1;
foo();
在别处定义了 foo:
var b = 2;
function foo(){
console.log(b); // 2
console.log(a); // error
}
这段代码我在chrome上执行出来是undefined,1.
我是写在一个js文件中,然后通过HTML的script引入,不知道老师说的在别处定义是什么意思,是写在两个js文件吗?
如果是两个文件,HTML中引入文件的顺序不同,会有不同的结果,一种报错,一种两个值都正常打印,我都试了的,总之怎么也不会有老师说的那种结果。
请老师看看是不是我哪里理解错了,还是老师写错了
展开
1
我们在线,来聊聊吧
✕
您好,当前有专业客服人员在线,让我们来帮助您吧。
我们在线,来聊聊吧