当我打开jQuery的源代码时,我找到了这一行.
var
// Will speed up references to window, and allows munging its name.
window = this
Run Code Online (Sandbox Code Playgroud)
这条线为什么以及如何加速?
我试图理解Javascript中的词法范围.在下面的例子中,我在另一个函数中编写了一个函数.当我运行时,我希望在第一个警报中弹出"爸爸",在第二个警报中弹出"妈妈".但实际发生的是,它在第一个弹出窗口显示"未定义",在第二个弹出窗口显示"妈妈".
function first(){
var x = "dad";
function second(){
alert(x);
var x = "mom";
alert(x);
}
second();
}
first();
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么在父函数中定义的变量"x"在子函数中不可见?奇怪的是,当我在子函数中删除变量"x"的声明时,它工作正常.有人可以在这里有效地了解词汇范围场景吗?
前sort()几天我问了一个关于在Perl 函数中使用"$ a"和"$ b"的问题:
Perl的"sort()"函数究竟是什么"$ a"和"$ b"?
我现在有一个跟进问题.是"$ a"和"$ b"仅使用sort()或是否有任何其他Perl函数利用这些特殊的全局变量?
或者即使没有其他功能使用它们,是否还有其他情况sort()你会使用"$ a"或"$ b"?
澄清:
简而言之,问题是"$ a"和"$ b"可以被其他东西使用sort()吗?
我只是想知道他们可以使用的其他情况.我从未见过其他任何东西使用的"$ a"或"$ b",并且想知道除了之外还有其他任何特殊用途sort().
符号和名称是否不同?保罗·格雷厄姆(Paul Graham)的Lisp,侧重于普通的口齿不清,有一些似乎暗示的讨论,例如
由于lambda表达式也是函数的名称,它们也可以首先出现在函数调用中:
((lambda(x)(*x 2)3)
6
这使得听起来像符号是名称,但名称不是符号.但我不明白什么样的Lisp"对象"符号是/可能的.
这也是源于我在sharp-quote(#')运算符v.的问题symbol-function.我怀疑这些不同的唯一原因是因为并非所有的名字都是符号,但我还没有足够的背景来理解这些答案(因此这个问题).
我也要求在elisp诉普通lisp中澄清.我假设这与lexical形式有关,直到版本24(我认为24.1)才在elisp中引入.
情况1:
rm(list = ls())
foo <- function(x = 6){
set <- function(){
x <- x*x}
set()
x}
foo()
# [1] 6
Run Code Online (Sandbox Code Playgroud)
案例2:
rm(list = ls())
foo <- function(x = 6){
set <- function(){
x <<- x*x}
set()
x}
foo()
# [1] 36
Run Code Online (Sandbox Code Playgroud)
我读到该<<-运算符可用于为与当前环境不同的环境中的对象赋值.它表示<<-可以对不在当前环境中的对象进行对象初始化.我想问一下可以使用哪个环境的对象进行初始化<<-.在我的情况下环境是foo功能环境,可以<<-初始化函数外部的对象或当前环境中的对象吗?完全混淆何时使用<-以及何时使用<<-.
SICP 中的练习 3.20:
绘制环境图来说明表达式序列的求值
Run Code Online (Sandbox Code Playgroud)(define x (cons 1 2)) (define z (cons x x)) (set-car! (cdr z) 17) (car x) 17使用上面给出的对的程序实现。
我的眼睛被毁了所以我不能画画。相反,我会尽力想象环境模型如何演变。
首先,这是程序对的实现。
(define (cons x y)
(define (set-x! v) (set! x v))
(define (set-y! v) (set! y v))
(define (dispatch m)
(cond ((eq? m 'car) x)
((eq? m 'cdr) y)
((eq? m 'set-car!) set-x!)
((eq? m 'set-cdr!) set-y!)
(else (error "Undefined
operation: CONS" m))))
dispatch)
(define (car z) (z 'car))
(define (cdr z) (z 'cdr))
(define (set-car! z …Run Code Online (Sandbox Code Playgroud) 我目前正在通过Graham的On Lisp工作,发现这一点很难理解:
绑定.词汇变量必须直接出现在源代码中.
setq例如,没有计算第一个参数,所以任何构建的都setq必须是一个扩展为a的宏setq,而不是一个调用它的函数.同样对于运算符,例如let,其参数在lambda表达式中作为参数出现,对于像扩展为lets的宏这样的运算,依此类推.任何要更改其参数的词法绑定的新运算符都必须写为宏.
这来自第8章,其中描述了何时应该和不应该使用宏来代替函数.
他在这一段中究竟是什么意思?有人会给出一两个具体的例子吗?
非常感激!
从不懂JS的人开始:
for (var i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
}
Run Code Online (Sandbox Code Playgroud)
给
6
6
6
6
6
Run Code Online (Sandbox Code Playgroud)
但是像这样使用IIFE
for (var i=1; i<=5; i++) {
(function(){
var j = i;
setTimeout( function timer(){
console.log( j );
}, j*1000 );
})();
}
Run Code Online (Sandbox Code Playgroud)
给
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么不
for (var i=1; i<=5; i++) {
setTimeout( function timer(){
var j = i;
console.log( j );
}, i*1000 );
}
Run Code Online (Sandbox Code Playgroud)
要么
for (var i=1; …Run Code Online (Sandbox Code Playgroud) 我有以下 Perl 脚本。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @fruits = qw(apple banana orange pear);
print Dumper \@fruits;
foreach my $fruit (@fruits) {
$fruit =~ s|apple|peach|;
}
print Dumper \@fruits;
Run Code Online (Sandbox Code Playgroud)
返回以下内容。
$VAR1 = [
'apple',
'banana',
'orange',
'pear'
];
$VAR1 = [
'peach',
'banana',
'orange',
'pear'
];
Run Code Online (Sandbox Code Playgroud)
我不明白为什么以下行将 @fruits 数组中的 apple 更改为 peach,因为我认为此行仅适用于 $fruit 变量,而不适用于 @fruits 数组。
$fruit =~ s|apple|peach|;
Run Code Online (Sandbox Code Playgroud) https://play.golang.org/p/kK9c71Yt9N - 这是我正在使用的代码。
我试图了解变量的词法范围X。如果我使用第:=11 行中的运算符,则X定义在外的func main会被隐藏,并且会在函数内创建一个新的作用域。如果我=在同一行中使用运算符,编译器会抱怨err未定义。
我的理解是:=操作员创建了未定义的变量,因此只err需要定义即可。但是,这种理解显然是错误的。
我可以做哪些代码更改以确保X不在 内重新定义main()?
我知道我可以执行以下操作以确保X不会在 内重新定义main():
var err error
X, err = InitX()
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法可以让我失踪?
lexical-scope ×10
javascript ×3
common-lisp ×2
lisp ×2
perl ×2
closures ×1
elisp ×1
evaluation ×1
go ×1
jquery ×1
macros ×1
r ×1
scheme ×1
sicp ×1
symbols ×1
web ×1