下面我们有一个IIFE(像任何函数一样)创建一个局部范围.在该范围内有一个parseInt功能.现在,由于浏览器中已经存在具有该名称的全局parseInt函数,因此本地函数将掩盖全局函数 - 在IIFE内部,任何调用都parseInt将调用本地函数,而不是全局函数.(仍然可以引用全局函数window.parseInt.)
parseInt('123', 10); // the browser function is called
(function() {
function parseInt() { return 'overshadowed'; }
parseInt('123', 10); // the local function is called
})();
parseInt('123', 10); // the browser function is called
Run Code Online (Sandbox Code Playgroud)
是否有法律上的(ECMAScript规范)或事实(普通)名称?掩盖?超载?
这是我想要完成的简化版本,但我想在函数范围之外传递一个变量.我在函数外声明变量但无法得到它.
HTML:
<p>5</p>
<p>6</p>
<p>7</p>
Run Code Online (Sandbox Code Playgroud)
JS:
$(document).ready(function () {
var gsd = "";
$("p").each(function () {
if ($(this).text() === "5") {
var gsd = $(this).text();
alert(gsd); // this works
}
})
alert("get var outside func" + gsd); //does not work
});
Run Code Online (Sandbox Code Playgroud) 我有一个可能是个愚蠢的问题.在下面的代码中,函数doStuff似乎将myArray重新分配给一个空数组,但是当在控制台中尝试它时,myArray仍然是[2,3,4,5].
var myArray = [2, 3, 4, 5];
function doStuff(arr) {
arr = [];
};
doStuff(myArray);
console.log(myArray)// => [2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
此外,修改数组的函数似乎工作正常.例如:
function changeSecondIndex(arr){
arr[2] = 25;
}
changeSecondIndex(myArray)
console.log(myArray) // => [2,3,25,5]
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解这里发生了什么吗?谢谢.
所以在解释语言中,比如 javascript,我们有:
var x = doThis(); // function call, assign statement
console.log(x); // print statement
function doThis(){ //function declaration
return "Hello World"; //return statement
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
何时(运行时)打印语句实际执行?在解析函数声明之前还是之后?如果它之前被执行,如何,因为没有编译器,代码会立即执行。
PS 我已经阅读了一些关于函数提升的内容,但仍然不明白。
我的 JavaScript 书“JavaScript The Definitive Guide,第 6 版”,第 270 页包含以下文本和代码:
“...在 for 循环中,初始化表达式在新变量的范围之外进行评估”
let x = 1;
for (let x = x + 1; x < 5; x++) {
console.log(x); // prints 2, 3, 4
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行上述代码(在最新版本的 Chrome 和 FF 中)时,出现控制台错误:
参考错误:x 未定义
初始化前无法访问词法声明“x”
书上的代码不对吗?(这本书的勘误网站上没有任何关于:这个的内容。)
我只是想知道如果你尝试多次初始化一个变量,究竟会发生什么(内部).
例如:
var x = -5;
if(x < 0) {
var x = 5;
}
Run Code Online (Sandbox Code Playgroud)
我理解最终结果会是x = 5但是这会导致浏览器销毁变量并重新启动吗?
我试图模仿array.map()使用forEach().
var map = function () {
var empMap = [];
numbers.forEach(function (number) {
empMap.push(number);
console.log('empMap', empMap);
});
return(empMap);
}
var numbers = [1, 2, 3];
//implement this line
var doubles = map(numbers, function (number) {
return number * 2;
});
console.log(doubles); // [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
所以,我有这个numbers数组的值,我有自己map function的迭代数组,然后我推动空数组中的值empMap
之后,我调用这个map函数并将每个值乘以2并将其打印出来.
我应该得到双倍的输出为[2,4,6]而不是[1,2,3].不知道我哪里错了.
javascript ×7
arrays ×2
function ×2
scope ×2
declaration ×1
foreach ×1
iife ×1
let ×1
variables ×1