标签: let

'let和'var'在Typescript中是一样的吗?

我正在看一下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)

javascript var let typescript

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

SML中"local"和"let"的区别

我找不到一个初学者友好的答案,解决了SML中"local"和"let"关键字之间的区别.有人可以提供一个简单的例子,并解释何时使用另一个?

local sml let

9
推荐指数
2
解决办法
4071
查看次数

为什么不慢于var?

为了使一个极端的总结,之间的差异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还需要执行额外的步骤:清理 …

javascript performance var let

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

let声明需要初始化表达式

我正在阅读简单值部分中的Swift编程语言

"使用let来创建常量,使用var来创建变量.在编译时不需要知道常量的值,但是必须为其分配一次值"

所以我想我能做到这一点

let aConstant:Int
aConstant = 5
Run Code Online (Sandbox Code Playgroud)

但我得让声明需要初始化表达式!

这是为什么 ?它们是什么意思"在编译时不需要知道常量的值"?

constants let ios swift

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

快速"让"的意思是什么?

我学得很快,但我不是母语为英语的人,只想问'让'意味着什么?我知道它是一个常数但是为什么它不是"缺点"?'let'是某个单词的缩写吗?我不会在不知情的情况下死去,我只是好奇;)谢谢.

constants let swift

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

如何在Haskell中与更高级别的类型进行交互?

我遇到了一个更高级别的令人费解的情况.我想出了如何使它工作,但我不明白工作和非工作版本之间的区别.

有了这些背景定义:

{-# LANGUAGE RankNTypes #-}

data AugmentedRational = Exact Integer Rational -- Exact z q is q * pi^z
                       | Approximate (forall a.Floating a => a)

approximateValue :: Floating a => AugmentedRational -> a
approximateValue (Exact z q) = (pi ** (fromInteger z)) * (fromRational q)
approximateValue (Approximate x) = x
Run Code Online (Sandbox Code Playgroud)

......这两个功能有什么区别.

版本A(我最初写的,不起作用)

-- lift a floating function to operate on augmented rationals, treating the function as approximate
approx :: (forall a.Floating a => a -> a) -> AugmentedRational …
Run Code Online (Sandbox Code Playgroud)

haskell let higher-rank-types impredicativetypes

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

在Javascript中阻止范围,功能范围和本地范围

  1. 块范围有时一样的功能范围?我知道函数范围适用于函数内部的所有内容,但是不知道块范围是什么.
  2. 对于Javascript,目前是否建议使用let/ const代替var以后进行维护?(这来自Airbnb风格指南)

javascript scope var let

8
推荐指数
2
解决办法
3680
查看次数

F#:解构与受歧视的联合绑定

open System

let x = (1, 2)
let (p, q) = x
printfn "A %A" x
printfn "B %A %A" p q

let y = Some(1, 2)
try
  let None = y
  ()
with
  | ex -> printfn "C %A" ex
let Some(r, s) = y
printfn "D %A" y
// printfn "E %A %A" r s
Run Code Online (Sandbox Code Playgroud)

当我取消注释最后一行时,编译器拒绝代码抱怨

/home/rRiy1O/prog.fs(16,19):错误FS0039:值或构造函数'r'未定义
/home/rRiy1O/prog.fs(16,21):错误FS0039:值或构造函数的' 没有定义

是不允许在解构中使用枚举let

但首先,甚至当我注释掉最后一行...什么在这里干什么?这是输出:

A (1, 2)
B 1 2
D Some (1, 2)
Run Code Online (Sandbox Code Playgroud)

更新

为了记录,这是固定版本: …

f# pattern-matching destructuring let variable-declaration

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

为什么这个F#函数需要括号?

为什么read_rest_of_csv下面需要括号?

    let read_rest_of_csv() =
        csv_data.Add(csv_fileH.ReadFields()) |> ignore
        not csv_fileH.EndOfData

    while read_rest_of_csv() do ignore None
Run Code Online (Sandbox Code Playgroud)

如果没有括号,循环将不会终止.

open System
open System.Threading
open System.Collections.Generic
open System.Linq
open System.Text
open System.Threading.Tasks
open System.IO
open Microsoft.VisualBasic.FileIO

[<EntryPoint>]
let main argv =
    let csv_fileH = new TextFieldParser("test1.csv")
    csv_fileH.TextFieldType = FieldType.Delimited |> ignore
    let x = csv_fileH.SetDelimiters(",")
    let csv_data = new List<string[]>()

    let eod = csv_fileH.EndOfData
    if not eod then
        let column_headings = csv_fileH.ReadFields()
        csv_data.Add(column_headings) |> ignore

        let read_rest_of_csv =
            csv_data.Add(csv_fileH.ReadFields()) |> ignore
            not csv_fileH.EndOfData …
Run Code Online (Sandbox Code Playgroud)

f# functional-programming let

8
推荐指数
2
解决办法
1167
查看次数

普通口齿不清的地方政府

Common Lisp中的新手问题:

如何使我的过程每次调用时都返回具有自己的本地绑定的不同过程对象?当前,我使用let创建本地状态,但是两个函数调用共享相同的本地状态。这是代码,

(defun make-acc ()
  (let ((balance 100))
    (defun withdraw (amount)
      (setf balance (- balance amount))
      (print balance))
    (defun deposit (amount)
      (setf balance (+ balance amount))
      (print balance))
    (lambda (m)
      (cond ((equal m 'withdraw)
              (lambda (x) (withdraw x)))
            ((equal m 'deposit)
              (lambda (x) (deposit x)))))))

;; test

(setf peter-acc (make-acc))

(setf paul-acc (make-acc))

(funcall (funcall peter-acc 'withdraw) 10)
;; Give 90

(funcall (funcall paul-acc 'withdraw) 10)
;; Expect 90 but give 80
Run Code Online (Sandbox Code Playgroud)

我应该用其他方式吗?我的写作方式有误吗?有人可以帮我解决这个疑问吗?提前致谢。

lisp state common-lisp let

8
推荐指数
3
解决办法
86
查看次数