我写了下面的脚本,只是为了看一个变量和一个分配了函数的函数的名字发生冲突时会发生什么:
var f = function() {
console.log("Me original.");
}
function f() {
console.log("Me duplicate.");
}
f();
Run Code Online (Sandbox Code Playgroud)
我得到的输出是"我原创".为什么没有调用其他函数?
另外,如果我将原来的作业改为var f = new function() {,我会得到"我原创",然后是TypeError说object is not a function.有人可以解释一下吗?
我遇到了JavaScript'hoisting',我没有弄清楚这段代码是如何起作用的:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
我知道像(function a() {})这样的函数声明将被提升到函数b作用域的顶部,但是它不应该覆盖a(因为函数声明覆盖变量声明而不是变量初始化)的值,所以我期望警报的值会是10而不是1 !!
今天,当我看到全局变量undefined在某些情况下具有价值时,我完全感到惊讶.
例:
var value = 10;
function test() {
//A
console.log(value);
var value = 20;
//B
console.log(value);
}
test();
Run Code Online (Sandbox Code Playgroud)
输出为
undefined
20
Run Code Online (Sandbox Code Playgroud)
这里,为什么JavaScript引擎将全球价值视为undefined.我知道JavaScript是一种解释型语言.如何在函数中考虑变量?
这是JavaScript引擎的陷阱吗?
在JavaScript中声明本地(内部)函数时,有两个选项:
使用var关键字声明,分配给变量:
(function() {
var innerFunction1 = function() { ... };
innerFunction1();
}());
Run Code Online (Sandbox Code Playgroud)
仅使用function关键字声明,而不指定给变量:
(function() {
function innerFunction2() { ... };
innerFunction2();
}());
Run Code Online (Sandbox Code Playgroud)
我可以看到第二个的一个优点:函数可以在调用它的代码下面声明,因此更容易将私有函数与实际执行的代码分开.
哪个更好,为什么?
抱歉noobie问题.你能解释一下,有什么区别:
1. var a = [];
a['b'] = 1;
2. var a = {};
a['b'] = 1;
Run Code Online (Sandbox Code Playgroud)
我在网上找不到文章,所以写在这里.
下面的代码片段有什么区别?
var a = 0;
function b(){
a = 10;
return function a(){};
}
b();
console.log(a); // => 10
Run Code Online (Sandbox Code Playgroud)
和
var a = 0;
function b(){
a = 10;
return
function a(){};
}
b();
console.log(a); // => 0
Run Code Online (Sandbox Code Playgroud)
它与JavaScript提升有关,但我对这个概念的理解恰恰相反.
我不完全理解为什么以下显示"悬挂"到最后.
var x = 'set';
var y = function ()
{
// WHAT YOU DON'T SEE -> var x;
// is effectively "hoisted" to this line!
if (!x)
{
// You might expect the variable to be populated at this point...it is not
// though, so this block executes
var x = 'hoisted';
}
alert(x);
}
//... and this call causes an alert to display "hoisted"
y();
Run Code Online (Sandbox Code Playgroud)
任何指针将不胜感激.
我正在阅读有关JavaScript 范围和提升的内容.我看到下面的一个样本让我有些疑惑.所以,我想知道它是如何工作的.
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
代码将提醒1!但是如果我们消除"function a(){}"部分,代码将提醒10.
那么,它是如何运作的!"函数a(){}"在这里做了什么以及它如何影响范围.
我也无法理解一个空的"回归"的含义.在这段代码中.
那么,这段代码如何依赖JavaScript范围工作?
我有一个名为foo的变量和名为foo的函数.
//variable followed by function declaration
var foo="bar";
function foo(){
return "bar";
}
//function declaration followed by variable
function foo(){
return "bar";
}
var foo="bar";
//When I call foo it returns string bar;
//When I enquired foo() it throws error
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么变量名覆盖函数声明?
我对JavaScript范围有一些了解 - 该语言具有函数级范围,并且变量和函数声明被提升到其包含范围的顶部.但是,我无法弄清楚为什么以下两段代码记录不同的值:
这会将值1记录到控制台:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
神秘的是,这记录10:
var a = 1;
function b() {
a = 10;
return;
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
那么引擎盖下面发生了什么?