相关疑难解决方法(0)

JavaScript中的变量阴影

下面我们有一个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规范)或事实(普通)名称?掩盖?超载?

javascript scope iife

26
推荐指数
2
解决办法
1万
查看次数

访问函数范围外的变量

这是我想要完成的简化版本,但我想在函数范围之外传递一个变量.我在函数外声明变量但无法得到它.

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)

javascript variables scope function

24
推荐指数
1
解决办法
8万
查看次数

在Javascript中引用数组

我有一个可能是个愚蠢的问题.在下面的代码中,函数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 arrays

7
推荐指数
1
解决办法
224
查看次数

在运行时解析并执行函数声明

所以在解释语言中,比如 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 declaration function

4
推荐指数
1
解决办法
281
查看次数

带有 let 的 JavaScript for 循环

我的 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”

书上的代码不对吗?(这本书的勘误网站上没有任何关于:这个的内容。)

javascript let

1
推荐指数
1
解决办法
540
查看次数

如果在已初始化的变量上使用`var`,会发生什么?

我只是想知道如果你尝试多次初始化一个变量,究竟会发生什么(内部).

例如:

var x = -5;

if(x < 0) {
    var x = 5;
}
Run Code Online (Sandbox Code Playgroud)

我理解最终结果会是x = 5但是这会导致浏览器销毁变量并重新启动吗?

javascript

0
推荐指数
1
解决办法
87
查看次数

forEach模仿.map()函数

我试图模仿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].不知道我哪里错了.

这是同样的[codepen] 1.

javascript arrays foreach

0
推荐指数
1
解决办法
42
查看次数

标签 统计

javascript ×7

arrays ×2

function ×2

scope ×2

declaration ×1

foreach ×1

iife ×1

let ×1

variables ×1