在JavaScript中,var声明创建全局对象的属性:
var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
ES6引入了具有块范围的声明的词法作用域。
let x = 15;
{
let x = 14;
}
console.log(x); // logs 15;
但是,这些声明是否为全局对象创建属性?
let x = 15;
// what is this supposed to log in the browser according
阅读关于Function构造函数和function声明之间差异的mdn文档。这里指定的示例可以在浏览器上工作,也可以在node.js repl上工作,但是在通过文件尝试它时,node.js进程会因此错误而崩溃。
ReferenceError: x is not defined
这是节目
var x = "bar";
function test() {
var x = "baz";
return new Function("return x;");
}
var t = test();
console.log(t());
当从带有
我尝试过使用ie,firefox和node.js的代码
var x = 10;
var o = { x: 15 };
function f(){
console.log(this.x);
}
f();
f.call(o);
在浏览器中的结果是10,15,但在node.js中的结果是未定义的,15。
请解释一下“this”关键字在浏览器和node.js中的不同表现是什么?我读了很多页,但没有任何明显的答案。提前谢谢。
看看下面的代码:
var pocket = {
cash: 1000,
showCash: function() {
return this.cash;
}
};
var thomas = {
name: "Thomas",
work: function() {
console.log('I don\'t want to, but I have to... work!');
},
a = 123; // becomes global var
var b = 234; // local var
function f() {} // local func
g = function() {} // got a global func
现在,如何打印a和g (以及迄今为止所有其他全局变量),但不打印b和f (以及其他局部变量)。
console.log(this)// is not working.
编辑:建议使用“窗口”变量将只在浏览器中工作,但嵌入式Javascript或Node.js没有“窗口”变量。
当时我正在读的,并决定做这个实验。
我有一个足够简单的脚本foo.js
var a = 'foo';
var output;
// lets find a way to output strings in both
// Chrome and Node.js
if (typeof alert === 'undefined') {
output = console.log;
} else {
output = alert;
}
function getA() {
return this.a;
}
var foo = getA();
o
对于下面的代码,在Javascript中,我得到了输出:窗口
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()());
但是对于Node.js,我得到了下面的输出:未定义
我很困惑,Nod
我在本地安装了Node.js v8.10.0。我写了一个简单的脚本来玩这个:
var x = 1;
var fn = function (a) {
var x = a;
console.log(`local x = ${x}`);
console.log(`global x = ${this.x}`);
}
fn(10);
当我通过Node.js执行脚本时,我得到以下结果:
local x = 10
global x = undefined
当我在Chrome中执行脚本时,我得到以下结果:
local x = 10
global x = 1
请你向我解释
我尝试在JavaScript中用一行代码定义global对象,如下所示:
var global = this.global || this;
上述语句在全局范围内。因此,在浏览器中,this指针是window对象的别名。假设它是在当前网页上下文中执行的JavaScript的第一行,global的值将始终与this指针或window对象的值相同。
在CommonJS实现中,比如RingoJS和node.js,this指针指向当前的ModuleScope。但是,我们可以通过在ModuleScope上定义的属性global来访问global对象。因此,我们可以通过this.global属性访问它。
这是一些代码
// app.js
let foo = 3;
let bar = 35;
在浏览器中,我可以做window.foo,我会得到我的3,如果我制作window.bank = 'lalala',它将和我所写的一样
let foo = 3;
let bar = 35;
let bank = 'lalala'
在Node.js中,我需要同样的东西,这个对象引用模块的全局范围。我知道global变量,但它不是我所需要的,因为我希望本地全局到当前模块,而不是整个节点应用程序。
我有客户端JavaScript,它不以任何方式与DOM或web浏览器交互。我想在没有启动浏览器的情况下,在Travis-CI中对这段代码的功能进行单元测试(这只是一个漂亮的数据库/缓冲区)。命令行JavaScript让我觉得我需要node.js。我查看了各种单元测试库,并确定了Mocha的简单性,但是使用基于node.js的库测试基于浏览器的模块/类似乎过于困难。
具体来说,我想测试这个(简化的)浏览器JavaScript有效代码:
// I need this NameSpace to organise my code and isolate from other code
var Neng
我有一个由JavaScript加载的require文件。
// loaded by require()
var a = this; // "this" is an empty object
this.anObject = {name:"An object"};
var aFunction = function() {
var innerThis = this; // "this" is node global object
};
aFunction();
(function(anyParameter){
console.l