var name = 'window' function Person(name) { this.name = name this.foo1 = function () { console.log(this.name) }, this.foo2 = () => console.log(this.name), this.foo3 = function () { return function () { console.log(this.name) } }, this.foo4 = function () { return () => { console.log(this.name) } } } var person1 = new Person('person1') var person2 = new Person('person2')person1.foo1() // 结果:________6__________ person1.foo1.call(person2) // 结果:_______7___________ person1.foo2() // 结果:__________8________ person1.foo2.call(person2) // 结果:_______9___________ person1.foo3()() // 结果:_______10___________ person1.foo3.call(person2)() // 结果:________11__________ person1.foo3().call(person2) // 结果:________12__________ person1.foo4()() // 结果:________13__________ person1.foo4.call(person2)() // 结果:_______14___________ person1.foo4().call(person2) // 结果:________15__________
时间: 2024-04-26 12:23:33 浏览: 8
1. person1.foo1() // 结果: "person1"
2. person1.foo1.call(person2) // 结果: "person2"
3. person1.foo2() // 结果: "person1"
4. person1.foo2.call(person2) // 结果: "person1"
5. person1.foo3()() // 结果: "window"
6. person1.foo3.call(person2)() // 结果: "window"
7. person1.foo3().call(person2) // 结果: "person2"
8. person1.foo4()() // 结果: "person1"
9. person1.foo4.call(person2)() // 结果: "person2"
10. person1.foo4().call(person2) // 结果: "person1"
相关问题
var foo = config.foo || 'default foo';
这段代码是 JavaScript 中的一种常见写法,它的作用是,如果 config 对象中存在 foo 属性,则将其值赋给变量 foo;如果不存在 foo 属性,则将默认值 'default foo' 赋给变量 foo。
具体来说,代码中的 || 运算符是逻辑或运算符,它的运算规则是,如果左侧表达式的值为真,则返回左侧表达式的值;否则返回右侧表达式的值。因此,当 config 对象中存在 foo 属性并且其值不为假(如空字符串、0、false、null、undefined)时,表达式 config.foo 的值为真,所以将 config.foo 的值赋给变量 foo;否则表达式 config.foo 的值为假,所以将 'default foo' 赋给变量 foo。
需要注意的是,这种写法存在一定的风险,因为如果 config.foo 的值为假,但是是一个合法值(如空字符串或数字 0),则会误将默认值赋给变量 foo。如果想要更精确的判断,可以使用类似下面的写法:
```javascript
var foo = (config && config.foo) || 'default foo';
```
这样,只有当 config 存在且 config.foo 的值为真时,才将 config.foo 的值赋给变量 foo。如果 config 不存在或者 config.foo 的值为假,就会使用默认值 'default foo'。
var foo = function () { console.log("foo1") } foo() var foo = function () { console.log("foo2") } foo() function foo() { console.log("foo1") } foo() function foo() { console.log("foo2") } foo()
这段代码的输出结果是:
```
foo1
foo2
foo1
foo2
```
首先,第一个 `foo()` 调用会输出 `"foo1"`,因为在第一次函数声明前,`foo` 变量被赋值为第一个函数表达式。接着,第二个 `foo()` 调用会输出 `"foo2"`,因为此时 `foo` 变量被重新赋值为第二个函数表达式。
在第三个和第四个函数声明中,因为函数声明优先于变量声明,所以第三个 `foo()` 调用会输出 `"foo1"`,而第四个 `foo()` 调用会输出 `"foo2"`。