关于JavaScript和局部变量,我有一个相当普遍的问题.我的问题是以下内容之间有什么区别,如果有的话:
function bla
{
var a = 2; // local variable
a = 3; // the local variable a gets a new value
// Would do the following line anything different
// (than simply asigning this value?)
var a = 4;
}
Run Code Online (Sandbox Code Playgroud)
我想我不会得到两个名为a的局部变量.在其他语言中,这甚至是一个错误.那有什么用呢?
我过去常常检查是否var定义了全局:
if (window['myvar']==null) ...
Run Code Online (Sandbox Code Playgroud)
要么
if (window.myvar==null) ...
Run Code Online (Sandbox Code Playgroud)
它适用于 var myvar
现在我正在尝试切换到let,这不再起作用了.
var myvar='a';
console.log(window.myvar); // gives me a
let mylet='b';
console.log(window.mylet); // gives me undefined
Run Code Online (Sandbox Code Playgroud)
问题:一个全球性的let,没有任何的地方,如果有什么东西被像我可以定义我可以看看var从window对象?
更普遍的:
是var myvar='a'相当于window.myvar='a'?
我听到人们说在全球范围内,let并且var/表现相同,但这不是我所看到的.
根据我的知识,我们在javascript中使用var和let用于变量声明,唯一的区别是var得到了当前函数的let作用域,同时将作用域限定为当前块.所以如果我使用它var而不是let任何地方它应该工作.但是在下面的代码中......
<li *ngFor="let fruit of fruits">
{{ fruit}}
</li>
Run Code Online (Sandbox Code Playgroud)
...如果我使用var它会给出错误.
<li *ngFor="var fruit of fruits">
{{ fruit}}
</li>
Run Code Online (Sandbox Code Playgroud)
错误:未捕获(在承诺中):错误:模板分析错误:分析程序错误:ng:///AppModule/AppComponent.html@4:4中的[var fruit of fruits]中第1列的意外标记变量("
有人能告诉我为什么会这样吗?
在"use strict";javascript中还有其他方法可以将值初始化为多个变量吗?因为这样做:
var x = y = 14;
Run Code Online (Sandbox Code Playgroud)
会导致错误: Uncaught ReferenceError: y is not defined
在这里得到我的参考:
我正在看一下AngularJS 2和Typescript,我决定用这个来学习一些打字稿的基础知识.通过许多研究,我找到了关于模块,Typescript的好主题,其中一个讨论了'let'和'var'命令来声明变量; 根据这个问题,下面的Typescript代码应该只显示一个警报并在控制台中抛出错误:
test.ts:
for(let i = 0; i < 1; i++) {
alert(i);
}
alert(i);
Run Code Online (Sandbox Code Playgroud)
编译test.js:
for(var i = 0; i < 1; i++) {
alert(i);
}
alert(i);
//# sourceMappingURL=test.js.map
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.编译器"忽略""let"命令并将其转换为"var"命令.为什么会这样?Typescript只适用于类吗?
我正在使用AngularJS配置'npm start',因此它会自动编译我的'test.ts'文件:
"scripts": {
"start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
"lite": "lite-server",
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings"
},
Run Code Online (Sandbox Code Playgroud) 我是初学者,我有点理解Lazy Var vs. Let.我注意到,当使用Lazy Var时,特别是使用ImageViews,可以节省大量的内存使用量.但是到目前为止我看过的教程和指南并没有经常使用Lazy Var,所以我很怀疑它是不好的做法而且我忽略了一些东西.
我做了一点研究,得知Lazy不是"线程安全",但我不明白这意味着什么.我已经看到了很多优点和缺点,但我无法得出任何结论,特别是因为我的知识非常有限.
什么时候(或更好)在创建UIView时使用Lazy Var vs. Let?
lazy var profileImageView: UIImageView = {
let imageView = UIImageView(image: #imageLiteral(resourceName: "page1"))
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFit
return imageView
}()
Run Code Online (Sandbox Code Playgroud) 为了使一个极端的总结,之间的差异var,并let是一个范围之内他们的生活.
(function() {
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(`i: ${i}`);
}, i * 100);
}
// 5, 5, 5, 5, 5
for (let j = 0; j < 5; j++) {
setTimeout(function() {
console.log(`j: ${j}`);
}, 1000 + j * 100);
}
// 0, 1, 2, 3, 4
}());Run Code Online (Sandbox Code Playgroud)
i(声明var)生活在整个function j(声明着let)仅存在于for循环内.对我来说,这意味着javascript,在每次迭代之后,除了声明和赋值给变量之外,let还需要执行额外的步骤:清理 …
我的一个朋友注意到了
var<Integer> list = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)
在 Java 中有效。事实证明, 的类型list被评估为ArrayList<Double>。
使用时var<Integer> list = new ArrayList<>();,list就是ArrayList<Object>。
我们俩都无法弄清楚泛型类型的var作用,因为它似乎被忽略了。但如果是这样,为什么这首先在语法上是正确的?
我有一个变量activeUserName和一个变量manager1。
如何检查是否activeUserName包含至少三个字符,在manager1?(这些字符的位置无关紧要)
例如在下面的例子中,它应该返回 true,因为字符 'J'、'o' 和 'e' 在里面manager1。
var activeUserName = "JohnDoe100";
var manager1 = "JYZALoe999";
Run Code Online (Sandbox Code Playgroud)
现在我正在使用 indexOf 方法并且只查看某些位置的字符,这就是我想改变它的原因:
if (isEditor == false){
if (((activeUserName.indexOf(manager1.charAt(0)) !== -1) && (activeUserName.indexOf(manager1.charAt(2)) !== -1)) || (activeUserName.indexOf(manager1.charAt(4)) !== -1)){
// doSth();
} else if (((activeUserName.indexOf(manager2.charAt(0)) !== -1) && (activeUserName.indexOf(manager2.charAt(2)) !== -1)) || (activeUserName.indexOf(manager2.charAt(4)) !== -1)){
// doSth();
} else {
// doSth();
}
}
Run Code Online (Sandbox Code Playgroud)
我读过 Regex,但我不确定这是否可以应用在这里。
任何帮助表示赞赏!
我已经明白为什么这段代码的输出应该是3 3 3.
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}Run Code Online (Sandbox Code Playgroud)
但我无法理解为什么这段代码的输出是0 1 2.
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}Run Code Online (Sandbox Code Playgroud)
我希望第二个循环的输出更加清晰for。
var ×10
javascript ×8
let ×6
angular ×1
character ×1
ecj ×1
for-loop ×1
generics ×1
indexof ×1
java ×1
performance ×1
settimeout ×1
string ×1
swift ×1
typescript ×1
variables ×1