javascript中的变量范围是什么?它们的内部是否与函数外部相同?或者甚至重要吗?另外,如果变量是全局定义的,那么它们存储在哪里?
我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,浏览器将发出"1"警报.
我仍然不确定它为什么会返回"1".他说的一些事情就像是:所有的功能声明都被提升到顶部.您可以使用函数来调整变量的范围.仍然没有为我点击.
当我将undefined和null与Boolean false进行比较时,该语句返回false:
undefined == false;
null == false;
Run Code Online (Sandbox Code Playgroud)
它返回false.为什么?
嗨,大家好,我有一个简单的函数和一个全局变量.
为什么
mynameundefined不是字符串"global"?
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
Run Code Online (Sandbox Code Playgroud)
是不是可以引用在该函数范围之外定义的外部变量?在这个全局变量......
我如何解决这个问题,以便undefined从全局变量中得到一个?
这里发生了什么事?如果console.log在内部函数中声明一个变量,则会得到不同的结果
我知道var具有功能范围,内部函数可以从其父级访问变量
function outer() {
var a = 2;
function inner() {
a++;
console.log(a) //log NaN
var a = 8
}
inner()
}
outer()Run Code Online (Sandbox Code Playgroud)
function outer() {
var a = 2;
function inner() {
a++;
console.log(a) //log 3
var b = 8
}
inner()
}
outer()Run Code Online (Sandbox Code Playgroud)
NaN在第一个示例中返回日志3,在第二个示例中返回日志
function a(){
var h = 1;
function b(){
alert(h);
}
b();
}
a();
Run Code Online (Sandbox Code Playgroud)
警报1 ;
function a(){
var h = 1;
function b(){
if(false){
var h = h * 2;
}
alert(h);
}
b();
}
a();
Run Code Online (Sandbox Code Playgroud)
警报未定义.为什么?
我很惊讶以下代码有效:
while(fred !== "stop"){
var fred = prompt("Should I stop or go?")
};
Run Code Online (Sandbox Code Playgroud)
我在do while循环中理解这一点:
do {
code to be executed at least once
?}
while (condition);
Run Code Online (Sandbox Code Playgroud)
在函数声明fred为变量之前,JavaScript如何设置条件?
其他问题我读过涉及到VAR声明中的条件.
我正在尝试将一些OO设计模式应用于现有脚本,并且在遵循Mozilla帮助中心的一些指南之后,我在尝试实例化对象时仍然遇到错误.
我已经查看了这些资源以寻求帮助,但也许我并不完全理解JavaScript语法.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
错误:
Uncaught TypeError: GeoLocMap is not a constructor
Run Code Online (Sandbox Code Playgroud)
错误的一行:
var GeoLocMap = new GeoLocMap();
Run Code Online (Sandbox Code Playgroud)
是否应将以下每种方法定义为原型?
谢谢您的帮助!
码:
function GeoLocMap() {
this.map = -1;
this.regionName = "";
this.options = -1;
this.openCountData = -1;
this.chart = -1;
this.getMap = function () {
if (this.map == -1) {
this.map = new google.maps.Map(document.getElementById('geochart-colors'), {
zoom: 6,
//TODO replace with the region retrieved from eventData
center: new google.maps.LatLng(lat, long),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
} else {
return this.map;
}
};
this.getMapWidth = function …Run Code Online (Sandbox Code Playgroud) 为什么x下面示例中的变量返回undefined而不是25?
var x = 25;
(function() {
console.log(x);
var x = 10;
})();Run Code Online (Sandbox Code Playgroud)
我在这里对可变提升概念有点困惑。为什么第一个console.log(flag)输出undefined?它不应该捕获已经初始化的 false 值在作用域链中向上移动吗?
var flag = false;
(function(){
console.log(flag);
var flag = true; // JavaScript only hoists declarations, not initialisations
console.log(flag);
if(flag){
let name = "John";
const age = "24";
console.log(name);
console.log(age);
}
//console.log(name); //ReferenceError: name is not defined ( as name is block scoped here )
//console.log(age); //ReferenceError: age is not defined ( as age is block scoped )
})();Run Code Online (Sandbox Code Playgroud)
如果在同一个函数中重新声明和定义了相同的全局变量,为什么这个全局变量在函数中未定义?
var a = 1;
function testscope(){
console.log(a, 'inside func');
//var a=2;
};
testscope();
console.log(a, 'outside func');
output:
1 "inside func"
1 "outside func"
Run Code Online (Sandbox Code Playgroud)
考虑相同的代码,其中 var a = 2; 内部功能块未注释
var a = 1;
function testscope(){
console.log(a, 'inside func');
var a=2;
};
testscope();
console.log(a, 'outside func');
Output
undefined "inside func"
1 "outside func"
Run Code Online (Sandbox Code Playgroud) javascript ×11
function ×3
hoisting ×3
scope ×2
var ×2
oop ×1
scoping ×1
variables ×1
web ×1
while-loop ×1