What Makes Javascript Weird...and AWESOME

-> First Class Functions

-> Event-Driven Evironment

-> Closures

-> Scope

-> Context

scope === variable access

context === this

First Class functions(回调函数)

function add(first,second,callback){
console.log(first+second);
if(callback){
callback();
}
} function logDone(){
console.log('done');
} add(2,3,logDone);
add(4,5); function handleClick(){
//something smart
}
$('#myDiv').click(handleClick);

Event-Driven Evironment(事件绑定,事件驱动)

var a = 1;
console.log('up');
jQuery(document).ready(function(){
jQuery('button').on('click',function(){
alert(a);
})
})

Closures(闭包)

jQuery(document).ready(function(){
var a = 1;
jQuery('button').on('click',function(){
alert(a++);
})
})

scope(作用域)

//scope ==== variable access
//首先在自己区域找,如果没有定义,影响的就是父亲节点的
var a = 1;
function foo(){
var b = 2;
}
foo();
console.log(b);
var a = 1;

function foo(){
//定义了,自己看着办
var a = 2;
console.log(a);
} function bar(){
//没有定义,找父亲,影响父亲
a = 3;
console.log(a);
} foo();
bar();
console.log(a); //233

context(执行上下文对象)

context === this

this===window;
var a = 1;
console.log(window.a);//1
console.log(this.a);//1
console.log(window === this); function foo(){
console.log(this);
}
foo();//Window test.html var obj = {
foo : function(one, two, three){
console.log(one);
console.log(this === window);//谁调用this指向谁
}
}
obj.foo();//false //call apply bind 扩充作用域,对象不需要和方法有任何耦合
obj.foo.call(window,1,2,3);//true
obj.foo.apply(window,[1,2,3]);//true
var myBoundFoo = obj.foo.bind(window);
myBoundFoo();//true
obj.foo();//false $('#openDiv').on('click',function(){
$('#div1').sideToggle(200,function(){
$(this).toggleClass('active');
}.bind(this))
})

是什么让javascript变得如此奇妙的更多相关文章

  1. Lazy.js : 让 JavaScript 变懒

    Lazy.js : 让 JavaScript 变懒 http://segmentfault.com/a/1190000000358463

  2. Javascript变长参数和默认参数

    /* javascript 变长参数 * 实参少于形参: 剩下的参数如果没有默认值,将解析为undefined * 实参多于形参: 剩下的实参可以通过 "实参对象"-argumen ...

  3. C#webbrowser控件技巧(取得javascript变量值,禁止显示脚本错误)

    C#中的webbrowser控件比较好用. 下面本人搜索整理的几个小技巧. 1. 从C#中取得javascript的变量值. using mshtml;using System.Reflection; ...

  4. 理解JavaScript变量值

    JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值是指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...

  5. 那些 JavaScript 自带的奇妙 Bug

    米娜桑,哦哈哟~ 本章讲解关于 JavaScript 奇妙的 Bug,与其说是Bug,不如说是语言本身隐藏的奥秘.接下来就看看可能会影响到我们编程的那些Bug吧. typeof null === &q ...

  6. 7个步骤:让JavaScript变得更好

    Dan Odell介绍了他编写的七步写出无瑕代码的计划,是在简化过程中最有用的工具.   随着浏览器性能提高,伴随着新的HTML5的编程接口的稳步采用,网页上的JavaScript的音量在逐渐增加.然 ...

  7. 回流与重绘:CSS性能让JavaScript变慢?

    参考张鑫旭博客: http://www.zhangxinxu.com/wordpress/2010/01/%E5%9B%9E%E6%B5%81%E4%B8%8E%E9%87%8D%E7%BB%98%E ...

  8. javascript for..in 知识

        JavaScript 中for...in...,一直在代码中使用,最初认为,for xx in obj||array 对于arry就xx对应为数组索引,对于obj来说xx对应就是obj中的pr ...

  9. 【总结】浅谈JavaScript中的接口

    一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...

随机推荐

  1. [SDOI2010]所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...

  2. SICP-1.7-递归函数

    递归函数 函数内部直接或间接的调用函数自身 将复杂问题简单化 例子程序 def sum_digits(n): """Return the sum of the digit ...

  3. php.ini配置文件中的session配置

    session.save_path = "D:\phpEnv\cachefiles" 这里的路径就是可以自己定义的存放session文件信息的目录,默认是'\tmp'(根目录下的t ...

  4. 数据库外连接及MySQL实现

    MySQL查询分为内连接查询和外连接查询,他们的区别在于:内连接查询的两个表示对等关系,根据条件进行匹配:外连接是以某一个表为主,两一个表根据条件进行关联.外连接分为左外连接.右外连接和全外连接.本文 ...

  5. 【LeetCode】306. Additive Number

    题目: Additive number is a string whose digits can form additive sequence. A valid additive sequence s ...

  6. JAVA基础——最简单的多重循环程序

    Java 循环语句之多重循环 循环体中包含循环语句的结构称为多重循环.三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环.在二重循环中,外层循环每执行一次,内层循环要执行一圈. 如下所示: ...

  7. 5.如何修改maven本地仓库

    首先测试机子上时候安装上maven,步骤是win+r-->cmd-->mvn -v-->看其是否出现如下字样:   如果时间长了你忘记了你安装的maven目录或者jdk目录,那么下面 ...

  8. Android studio出现Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Reques的解决办法

    最近更新了一下Android Studio,在导入新项目之后出现Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 4 ...

  9. tomcat 修改为自己项目界面

    修改Tomcat欢迎界面为自己项目界面 Posted on 2011-04-16 13:10 IceWee 阅读(1062) 评论(0)  编辑  收藏 所属分类: Tomcat  由于项目要发布到互 ...

  10. js 监控iframe URL的变化

    iframe的url可以前端任何地址,这样就可能出现漏洞,如果钓鱼网站通过js把src改成了危险地址,如果没有监控,就会有很大隐患.所以监控iframe的url变化就是必须要解决的问题了. 第一印象的 ...