声明时const存储在哪里?

时间:2019-03-09 10:00:07

标签: javascript node.js

我是JS的新手,从mozilla.org上阅读文档时,我读到在全局声明const时,它不会成为全局对象的属性。我的问题是,如果可以,该属性存储在哪里?

例如:

const a = 'HI!';

function hello() {
  console.log(this.a); // undefined
}

hello();

这将注销未定义的内容。

而不是用

进行分配
  

global.a ='嗨!'

我还可以通过a访问this吗?

3 个答案:

答案 0 :(得分:3)

如果您要访问位于外部范围内的constlet变量(在访问方面表现相同),则可以通过名称

const outerVariable = 'HI!';

function hello() {
  console.log("access from inner scope", outerVariable); 
}

hello();

除非变量被遮盖,否则它会起作用-在内部作用域中会创建一个具有相同名称的新变量

const outerVariable = 'HI!';

function hello() {
  const outerVariable = "impossible to access the outer declaration";
  console.log("access from inner scope", outerVariable); 
}

hello();

如果要使用this上下文访问它,则可以使用Function#call()Function#apply()或{{ 3}}。

const a = 'HI!';

function hello() {
  console.log("access from context", this.a); 
}

hello(); //undefined - it's not in the context

const newContext = {a : a}; //the new value of "this"
hello.call(newContext); //HI!
hello.apply(newContext); //HI!

const boundFunction = hello.bind(newContext); //"this" will always be newContext for boundFunction
boundFunction(); //HI!

在这种情况下,.call().apply()是等效的,但通常是Function#bind()

答案 1 :(得分:2)

有关常量的信息:

使用const可以定义不可变变量(常量)。

const PI = 3.1415;
PI = 5; // "TypeError: Assignment to constant variable.

但是,新项目仍然可以推入数组常量或添加到对象中。

const someArr = [3, 4, 5];
someArr.push(6);

现在,使用 this 关键字访问function内部的值,将仅为function block scope提供值。

因此,要访问const内部函数,可以使用:

const a = 'HI!';

function hello() {
  console.log(this.a); // undefined <- this refer to function hello's scope
  console.log(a);   // HI!
}

答案 2 :(得分:1)

它在您所在的块中声明。您仍然可以从同一块作用域(及其中声明的作用域)访问它,但不能从任何作用域使用window.a或global.a访问它。

所以-这可以工作:

const a = 1;

function b() {console.log(a);}

但是,这些不会:

window.a;
global.a;