学习JS时,您的Aha瞬间是什么?[关闭]


16

您还记得学习JavaScript的时候吗?您突然“明白”的时刻是什么时候?(例如,我的CSS瞬间是当我了解盒子模型时...)

我问的原因是我学习JS已有6周的时间,但我仍然感到很困惑。这是我最近在SO上读到的一些引言:

“ ..函数的作用类似于值,因为方法是具有函数值(也是对象)的对象的属性。”

我很好奇,如果您一开始也感到困惑,那是什么使您理解它。

(我正在阅读Sitepoint的“ Simply JavaScript”,《 Eloquent JavaScript》这本书,并遵循Lynda的Essential JavaScript教程。我没有任何编程经验,并且数学方面太糟糕了;)

谢谢!


1
我发现这句话令人困惑且说不清,说实话,而且多年来我一直在愤怒地使用JavaScript,因此如果它使新来的人感到困惑,我并不感到惊讶:)
Russ Cam

引号和混乱的到来是因为引号试图说函数是javascript中的一流对象。继续努力,您将为自己提供“哈哈”时刻的来源:其他参考框架。
chiggsy 2012年

Answers:


15

我认为对我来说最大的“ AHA”时刻是当我完全掌握以下内容时:

变量值可以是任何值,包括函数

var person = {
    name: 'Sean',
    getName: function() { return this.name; },
    numbers: [7, 11, 41]
}

var myvar = person.name;
alert(myvar); //prints name
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //undefined

myvar = person.getName;
alert(myvar); //prints the contents of the function as a string
alert(myvar()); //calls the function
alert(myvar.length); //undefined

myvar = person.numbers;
alert(myvar); //prints contents of array
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //prints 3


10

我同意其他一些答案所涉及的内容;对我来说,那是个美好的时刻,当时我了解什么是封闭

我发布了对问题的答案是什么?帮助解释这一点。

在不了解闭包的情况下,JavaScript是一种非常有限的语言,具有一些不错的速记语法功能,例如[]用于数组和JSON{}用于对象),以及在浏览器上下文中的DOM(window/ document)。

但是,一旦您了解了闭包,就会有很多了解

  • 真正的原型是什么(请参阅此处
  • 为什么原型是Java OOP关键请参阅此处
  • 如何大多数事件处理程序的Javascript 真正的工作(它看起来像魔术不理解闭包)
  • 如何通过回调为自己节省大量代码(和/或时间)

资源资源


4

我认为Java语言中对我来说最重要的语言是“啊哈”

  • 作为对象
  • 关闭
  • 基于原型的对象定向
  • JavaScript范围

对于所有这些主题,您应该在网络上找到大量资源。

(不要以为一切都将变得完全合乎逻辑:JavaScript的混淆)


真?JavaScript的混乱?在我看来,这一切都很自然。但这就是我:-P。
Htbaa 2011年

3

几年前,我刚开始学习javascript时,对我来说很困难,因为我首先从服务器端(php和perl)开始学习Web开发。

并不是说语法或OOP或我所能避免的任何事情,更何况javascript的实时性和事件驱动性-从“做到这一点,做到这一点并为您服务,您就完成了”到“做到这一点”等等,然后我们一直处于等待状态,直到用户离开页面为止一直处于响应状态”。那真的让我感到困惑。

我认为我无法说出真正使它陷入的任何事情(没有确定的“啊哈!”时刻-如果我必须说出具体的时刻,我会说我在学习AJAX时使用了搜索建议脚本,但是IMO只是武断的),但是当我最终掌握了差异时,一切都变得很容易了:)


这里已经有一些非常好的指示,谢谢大家!

1

当我终于掌握了可以将语言的任何部分重新定义为我想要的废话的想法时。在这方面,它比C还要强大。例如,如果我不喜欢标准toString()函数,那么我将实现自己的函数:

x.toString = function () {
    return "this is MY toString function biatch!";
}

这与覆盖有什么真正的不同?
妮可,

1

当我意识到可以在函数对象上设置属性时。

当我终于了解原型是什么时。

function Alpha(){
    return 'aplha';
}
Alpha.Beta = function(){
    return 'beta';
}
Alpha.prototype.Delta = function(){
    return 'delta';
}

Alpha(); // 'alpha'
Alpha.Beta(); // 'beta'
new Alpha().Delta(); // 'delta'

0
function Obj() {
    this.x = 42;
    this.value = function() {
        return this.x;
    };
}

var o = new Obj();
o.value();        // 42
var f = o.value;
f();              // undefined??

一公顷的时刻,当你终于赶上了这些结果。


0

对我来说,第一件事是:意识到JavaScript语言是它的主要用途:动态HTML和客户端Web编程。当我真的对DOM和浏览器不兼容感到沮丧时,我会对JavaScript感到沮丧。

瞬间#2:了解继承可以通过多种方式执行。典型的基于类的继承只是其中之一。还有其他一些,即基于原型(JavaScript中使用的样式)。

关于#1,我无法抗拒推荐JavaScript:The Good Parts。它本身就将JavaScript视为一种优秀的语言。


0

无块范围界定和吊装。

foo(); // function executes, no error

if (...) {
  function foo(){
    ...
  }
}


-1

jQuery基本上对我来说是“ a-ha”的时刻。在使用C#中的LINQ / lambda语法方面有丰富的经验之后,该语法感到很熟悉。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.