标签: let

使用"let"和"var"在JavaScript中声明变量有什么区别?

ECMAScript 6介绍了该let声明.我听说它被描述为"本地"变量,但我仍然不太确定它与var关键字的行为有何不同.

有什么区别?何时应该let使用var

javascript scope var let ecmascript-6

4199
推荐指数
28
解决办法
111万
查看次数

为什么在JavaScript中为块范围的变量声明选择名称'let'?

我理解为什么var采用这个名字 - 它是变量的,const- 它是一个常量,但名称背后的含义是什么let,它的范围是当前的块?随它去?

javascript let ecmascript-6

285
推荐指数
5
解决办法
9万
查看次数

是否在ES6中使用let或const声明变量?

我已经玩ES6一段时间了,我注意到虽然声明的变量var按预期提升了......

console.log(typeof name); // undefined
var name = "John";
Run Code Online (Sandbox Code Playgroud)

... 用吊装声明letconst似乎有一些问题的变量:

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?这是怎么回事?这个问题letconst这个问题有什么区别吗?

javascript const let hoisting ecmascript-6

240
推荐指数
5
解决办法
5万
查看次数

什么是暂时死区?

我听说在初始化之前访问letconst值可能会导致ReferenceError因为称为时间死区的东西.

什么是暂时死区,它与范围和吊装有什么关系,以及在什么情况下遇到?

javascript const let ecmascript-6

128
推荐指数
3
解决办法
2万
查看次数

Haskell:Where vs. Let

我是Haskell的新手,我对Where vs. Let感到非常困惑.它们似乎都提供了类似的目的.我已经阅读了WhereLet之间的一些比较,但我无法辨别何时使用每个.有人可以提供一些上下文或者一些示例,说明何时使用其中一个?

哪里与让

where子句只能在一个函数定义的电平来定义.通常,这与let定义的范围相同.唯一的区别是使用警卫时.该where条款的范围扩展到所有警卫.相反,let表达式的范围只是当前的函数子句和guard,如果有的话.

哈斯克尔作弊表

哈斯克尔维基是非常详细,并提供各种案件,但它使用的假设的例子.我觉得它的解释对初学者来说太简短了.

让我们的优势:

f :: State s a
f = State $ \x -> y
   where y = ... x ...
Run Code Online (Sandbox Code Playgroud)

Control.Monad.State

将无法工作,因为where指的是模式匹配f =,其中没有x在范围内.相比之下,如果你开始使用let,那么你就不会遇到麻烦了.

关于Let的优点的Haskell Wiki

f :: State s a
f = State $ \x ->
   let y = ... x ...
   in  y
Run Code Online (Sandbox Code Playgroud)

其中的优点:

f x
  | cond1 x   = a
  | cond2 …
Run Code Online (Sandbox Code Playgroud)

haskell where keyword let

109
推荐指数
5
解决办法
4万
查看次数

Java编译器中"let expression"(LetExpr)的目的是什么?

Java编译器似乎支持(寻找)let表达式.com.sun.tools.javac.tree.*LetExpr

JCTree中的一条评论甚至提到了一些语法

(let int x = 3; in x+2)
Run Code Online (Sandbox Code Playgroud)

这当然不被语言的语法所接受,并在早期的编译阶段被拒绝.

我想知道这个构造的起源,这是我以前从未见过的.

javac是由内部使用还是由其他工具合成?它可能只是Java早期的一件神器,它的语言功能从未见过光明吗?

今天有什么有用的东西吗?

一般来说,它为什么存在?

java compiler-construction language-design let

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

让我们在Clojure中结束

我知道它们是不同的,因为一个用于设置*compile-path*,一个不用.但是,我需要帮助他们为什么不同.

let使用给定的绑定创建一个新的范围,但是binding......?

binding clojure let

68
推荐指数
3
解决办法
2万
查看次数

v8 const,let和var的JavaScript性能影响?

无论功能差异如何,使用新关键字"let"和"const"对"var"的性能有任何广义或特定的影响吗?

运行程序后:

function timeit(f, N, S) {
    var start, timeTaken;
    var stats = {min: 1e50, max: 0, N: 0, sum: 0, sqsum: 0};
    var i;
    for (i = 0; i < S; ++i) {
        start = Date.now();
        f(N);
        timeTaken = Date.now() - start;

        stats.min = Math.min(timeTaken, stats.min);
        stats.max = Math.max(timeTaken, stats.max);
        stats.sum += timeTaken;
        stats.sqsum += timeTaken * timeTaken;
        stats.N++
    }

    var mean = stats.sum / stats.N;
    var sqmean = stats.sqsum / stats.N;

    return {min: stats.min, max: stats.max, mean: mean, …
Run Code Online (Sandbox Code Playgroud)

javascript performance v8 const let

66
推荐指数
3
解决办法
2万
查看次数

在Haskell中,我们何时使用let?

在下面的代码中,我可以把最后一个词放在in前面.它会改变什么吗?

另一个问题:如果我决定放在in最后一个短语的前面,我是否需要缩进它?

我试着没有缩进和拥抱抱怨

do {...}中的最后一个生成器必须是表达式

import Data.Char
groupsOf _ [] = []
groupsOf n xs = 
    take n xs : groupsOf n ( tail xs )

problem_8 x = maximum . map product . groupsOf 5 $ x
main = do t <- readFile "p8.log" 
          let digits = map digitToInt $concat $ lines t
          print $ problem_8 digits
Run Code Online (Sandbox Code Playgroud)

编辑

好的,所以人们似乎不明白我在说什么.让我重新说一下:鉴于上述背景,以下两个是否相同?

1.

let digits = map digitToInt $concat $ lines t
print $ problem_8 digits
Run Code Online (Sandbox Code Playgroud)

2.

let …
Run Code Online (Sandbox Code Playgroud)

whitespace haskell scope let where-clause

56
推荐指数
3
解决办法
5万
查看次数

Lazy Var vs Let

我想对Swift中的一些属性使用Lazy初始化.我当前的代码如下所示:

lazy var fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()
Run Code Online (Sandbox Code Playgroud)

问题是,一旦设置了fontSize,它将永远不会改变.所以我想做这样的事情:

lazy let fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()
Run Code Online (Sandbox Code Playgroud)

这是不可能的.

只有这个有效:

let fontSize : CGFloat = {
  if (someCase) {
    return CGFloat(30)
  } else {
    return CGFloat(17)
  }
}()
Run Code Online (Sandbox Code Playgroud)

所以 - 我想要一个延迟加载但永远不会改变的属性.这样做的正确方法是什么?使用let和忘记懒惰的初始化?或者我应该使用lazy var并忘记属性的恒定性质?

var let lazy-initialization swift

46
推荐指数
3
解决办法
2万
查看次数