是什么让javascript变得如此奇妙
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变得如此奇妙的更多相关文章
- Lazy.js : 让 JavaScript 变懒
Lazy.js : 让 JavaScript 变懒 http://segmentfault.com/a/1190000000358463
- Javascript变长参数和默认参数
/* javascript 变长参数 * 实参少于形参: 剩下的参数如果没有默认值,将解析为undefined * 实参多于形参: 剩下的实参可以通过 "实参对象"-argumen ...
- C#webbrowser控件技巧(取得javascript变量值,禁止显示脚本错误)
C#中的webbrowser控件比较好用. 下面本人搜索整理的几个小技巧. 1. 从C#中取得javascript的变量值. using mshtml;using System.Reflection; ...
- 理解JavaScript变量值
JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值是指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...
- 那些 JavaScript 自带的奇妙 Bug
米娜桑,哦哈哟~ 本章讲解关于 JavaScript 奇妙的 Bug,与其说是Bug,不如说是语言本身隐藏的奥秘.接下来就看看可能会影响到我们编程的那些Bug吧. typeof null === &q ...
- 7个步骤:让JavaScript变得更好
Dan Odell介绍了他编写的七步写出无瑕代码的计划,是在简化过程中最有用的工具. 随着浏览器性能提高,伴随着新的HTML5的编程接口的稳步采用,网页上的JavaScript的音量在逐渐增加.然 ...
- 回流与重绘: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 ...
- javascript for..in 知识
JavaScript 中for...in...,一直在代码中使用,最初认为,for xx in obj||array 对于arry就xx对应为数组索引,对于obj来说xx对应就是obj中的pr ...
- 【总结】浅谈JavaScript中的接口
一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...
随机推荐
- 《HelloGitHub》第 15 期
公告 这段时间没怎么写文章,跑去写 https://hellogithub.com 这个网站了,现在已经顺利上线,功能后面会持续迭代. 最后,这个 https://hellogithub.com 网站 ...
- 如果导入的项目只有源码,可以将其他项目中的.classpath 和 .project复制到根目录下即可。
如果导入的项目只有源码,没有对应的项目配置如web项目,可以将其他项目中的.classpath 和 .project复制到根目录下即可.
- 发布.NET MVC网站 到Azure
最近的项目部署在Microsoft Azure,学习了一些新东西,记录下. 1.账号. 用于登录portal(https://portal.azure.cn/),账号下有对应的Subscription ...
- 【Android Developers Training】 75. 使用NSD
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 23. 序言:保存数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 在suse上折腾iptables
需求背景:有台服务器希望屏蔽掉某IP对它的SSH连接. 临时客串下DevOps,下面的做法可能在专业运维的同学里不太专业,还请指教. 该服务器的操作系统是SuSE Linux,服务器上是安装了ipta ...
- sublime text 3 配置python IDE
Python越来越受“程序猿”们的青睐.快速的开发模式,简洁的代码格式,海量的扩展,这无疑都为python的火热奠定了基础. “磨刀不误砍柴工”,一款功能强劲的IDE能帮助开发者有效的管理.编辑,运行 ...
- SQL-结构化查询语言(1)
一:数据查询语言(DQL),Data Query Language,用以从表中获取数据,确定数据怎样在程序中给出.SELECT是DQL中用的最多的! select user,host,password ...
- win10常用的运行命令
WIN+R调出命令框: 1.calc:启动计算器 2.appwiz.cpl:程序和功能 3.certmgr.msc:证书管理实用程序 4.charmap:启动字符映射表 5.chkdsk.exe:Ch ...
- 如何在一个Eclipse同时启动两个Tomcat
比如:有两个版本的tomcat,一个5.*,一个6.*,此时由于两个工程分别部署在两个版本的tomcat下,需要同时启动两个tomcat,以下是方法: 1.特别要注意: 不要设置CATALINA_HO ...