您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
我已经玩ES6一段时间了,我注意到虽然声明的变量var按预期提升了......
console.log(typeof name); // undefined
var name = "John";
Run Code Online (Sandbox Code Playgroud)
... 用吊装声明let或const似乎有一些问题的变量:
console.log(typeof name); // ReferenceError
let name = "John";
Run Code Online (Sandbox Code Playgroud)
和
console.log(typeof name); // ReferenceError
const name = "John";
Run Code Online (Sandbox Code Playgroud)
这是否意味着变量声明let或未声明const?这是怎么回事?这个问题let和const这个问题有什么区别吗?
我是JavaScript的新手,我在本地和全局变量作用域上做了一些练习,以下是我的代码(小提琴):
var myname = "initial"
function c(){
alert(myname);
var myname = "changed";
alert(myname);
}
c();Run Code Online (Sandbox Code Playgroud)
当第一个警报被调用时,它显示myname为未定义.所以我的困惑是为什么我无法访问全局实例,myname如果我没有myname在函数中定义,那么它将正常工作.
为什么JavaScript提升变量?
设计师决定实施吊装时的理由是什么?还有其他流行语言吗?
请提供文档和/或记录的相关链接.
我正在尝试以下列方式构建HTML字符串:
htmlString = '<html>';
var headerString = "image1";
var sImage = "Android_images/"+headerString+".png";
htmlString += '<img src='+sImage+' />';
htmlString = '</html>';
Run Code Online (Sandbox Code Playgroud)
我需要动态附加图像字符串,但它显示:
<img src=Android_images/dfdfd.png />
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我为什么对多个变量使用一个var声明并在换行符上声明每个变量是否是一个很好的编程行为?
// bad
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';
// good
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';
Run Code Online (Sandbox Code Playgroud) for(var i=0;i<5;i++){}
alert(i);
Run Code Online (Sandbox Code Playgroud)
在javascript中,这将使我们获得其他5种语言,如C++,java,c#....只会给出一个错误,即i变量未在上下文中定义.
那么为什么for循环计数器在javascript中退出循环后不会被破坏?
我找到了这段代码:
if (!("aa" in window)) {
alert('oh my god');
var aa = 1;
}
alert("aa" in window);
alert(aa);
Run Code Online (Sandbox Code Playgroud)
此代码第二个警报是警报true,但是,第三个警报是"未定义",并且"if"中的警报未运行.为什么?
我认为原因是in; 它的作用是什么?
我在谷歌上搜索过,但一无所获,因为谷歌认为"在&srquo; 是一个过滤词.
我们总是使用inin循环,但是,坦率地说,我使用它但是并不真正理解它.
检查这个小提琴或下面的代码,告诉我为什么这个脚本的输出是10
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
Run Code Online (Sandbox Code Playgroud) 我习惯于在顶部块中声明范围中的每个变量以获得代码可读性.我怀疑函数范围内未添加到文档正文的节点会使空间混乱,并降低性能.他们会怎么样?一般而言,在函数范围内创建的变量会发生什么?执行功能后它们会被销毁吗?我是否需要担心释放内存?在一个范围的最顶层块声明变量是一个好习惯,还是只在需要时或在某些条件为真时才在现场声明变量?这有助于提高运行时性能吗?
假设这样的函数:
function myfunc() {
var someNode = document.createElement('div');
if(someCondition) { // add the node only if some condition is true
document.body.appendChild(someNode);
}
Run Code Online (Sandbox Code Playgroud)
VS这样的功能:
function myfunc() {
if(someCondition) { // create and add the node only if some condition is true
var someNode = document.createElement('div');
document.body.appendChild(someNode);
}
}
Run Code Online (Sandbox Code Playgroud) 功能范围对我来说非常好,已有20年了.现在我到处读,我应该使用let而const不是var.我想这主要是因为它是一个新功能.为什么我更喜欢块范围?