我是JS的新手,从mozilla.org上阅读文档时,我读到在全局声明const
时,它不会成为全局对象的属性。我的问题是,如果可以,该属性存储在哪里?
例如:
const a = 'HI!';
function hello() {
console.log(this.a); // undefined
}
hello();
这将注销未定义的内容。
而不是用
进行分配global.a ='嗨!'
我还可以通过a
访问this
吗?
答案 0 :(得分:3)
如果您要访问位于外部范围内的const
或let
变量(在访问方面表现相同),则可以通过名称
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;