在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
我尝试过使用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中的不同表现是什么?我读了很多页,但没有任何明显的答案。提前谢谢。
阅读关于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());
当从带有
当时我正在读的,并决定做这个实验。
我有一个足够简单的脚本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
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没有“窗口”变量。
看看下面的代码:
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!');
},
对于下面的代码,在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加载的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
我有客户端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
我被告知,全局范围中的'this‘表示全局对象,而在全局范围中使用'var’将定义全局对象中的属性。但是,我不知道为什么在node.js程序中使用'var‘和'this’时会出现以下行为。我在这方面找到了类似的,但我不认为我的问题与提升有关。有人能解释一下吗?谢谢。(我使用的是node.js版本0.12.4)
yyy = 20;
global.zzz = 30;
var xxx = 10;
this.nnn = 40;
var v = function() {
//console.log(global); // <-- There is
我一直在浏览这个网站和网站的答案,但找不到任何真正满足我。
我计划为后端编写一个基于node.js + socket.io的小型多人网络游戏。为了处理新用户,我编写了以下代码:
io.sockets.on('connection', function(socket)
{
socket.emit('connected', {message: "you are connected!"});
var player = new myGame();
}
myGame是我自己的一个函数,包含游戏本身的许多变量(用户名、分数、金钱.)。我的问题
我对node.js的一些行为感到困惑,这是不同的兄弟会谷歌控制台。
下面是一个简单的代码
var t = "GLOBAL";
var objet = {
t : "LOCAL1",
test : function() {
console.log(this.t,t);
}
};
var objet2 = {
t : "LOCAL2",
test : objet.test
};
var test = objet.test;
objet.test();
objet2.test();
test();
这段代码产生不同的结果。