[JS] JavaScript由浅入深(2) 进阶
本节,将围绕以下几点来讲。
知识点:多线程、作用域、闭包、this
先顶后看
1.多线程
在不支持H5的浏览器中。使用Concurrent.Thread.js.
在支持H5中,使用WebWork.
在H5以前,js是不支持多线程的。其中存在同步池和异步池的概念。当同步池处理完后,会调用异步池的事件,定时任务等。
以下很明显的区分js是否是多线程执行的
c#
js
<script>
setInterval(function () {
alert('1');
}, 1000);
</script>
使用Concurrent.Thread.js(本质是用的js定时函数来模拟多线程)
<script>
Concurrent.Thread.create(function () {
$(btn).click(func);
function func() {
alert('message');
}
var i = 0;
while (1) {
console.log(i);
}
})
</script>
使用WebWorker(也不能操作DOM元素)
<button id="btn">Test</button>
<script>
var work = new Worker('task.js');
work.onmessage = function (event) { //回调函数
alert(event.data);
}
work.postMessage(); //调用work,可以传参数 $(btn).click(func);
function func() {
alert('message');
}
</script> task.js:
onmessage = func; //调用的方法
function func() {
var i = 0;
while (1) {
console.log(i++);
}
}
2.作用域
js是函数级作用域,内部能访问外部变量。没有块级作用域(if else try catch)
<script>
if (false) var j = 100; //1.函数级作用域 2.变量前置
alert(j); //弹出undefined
alert(i); //报错 未定义
</script>
自执行函数在声明变量后执行。
<script>
var j = 100;
+function func() { //这里的~,也可以替换成+,!,~等其他一元操作符
alert(j); //弹出undefined
var j; //变量前置
}(); //如果没有这个~的话,解析器会认为function是一个函数声明的开始,而后面()将会导致语法错误。在function前面加上~时,就变成了一个函数表达式,而函数表达式后面又添加了一个()就变成了一个立即执行的函数了。
</script>
3.闭包
闭包就是改变变量的作用域。闭包会产生内存无法释放问题。
function func() {
var j = 10; //函数外不能访问到j
return function () { //通过闭包方式让外面能访问到j
return j;
}
}
var k = func()();
alert(k);
4.this
谁调用,this就指谁。当有闭包存在的时候,需注意this指向的调用者。
<script>
this.m = 10;
var obj = {
m: 1
, func: function () {
alert(this.m);
}
, bb: function () { //闭包函数
return function () {
alert(this.m);
}
}
}
obj.func(); //this指obj
obj.bb()(); //最终this指window
</script>
本节也只是抛砖引玉,内容中可能有误,希望各位如果发现错误的话,请及时告知。
[JS] JavaScript由浅入深(2) 进阶的更多相关文章
- [JS] JavaScript由浅入深(1) 基本特性
1.全局变量的特性: 在函数体内直接写的变量(未用var标志)自动升级为全局变量. (function func() { i = 100; }()); alert(i); 非常不建议不写var. va ...
- 潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师
潭州学院-JavaVIP的Javascript的高级进阶-KeKe老师 讲的不错,可以学习 下面是教程的目录截图: 下载地址:http://www.fu83.cn/thread-283-1-1.htm ...
- Atitit.js javascript的rpc框架选型
Atitit.js javascript的rpc框架选型 1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3 ...
- Immutable.js – JavaScript 不可变数据集合
不可变数据是指一旦创建就不能被修改的数据,使得应用开发更简单,允许使用函数式编程技术,比如惰性评估.Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map 和 f ...
- Js(javaScript)的闭包原理
问题?什么是js(javaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 小编 ...
- 【转】Eclipse去除js(JavaScript)验证错误
这篇文章主要是对Eclipse去除js(JavaScript)验证错误进行了介绍.在Eclipse中,js文件常常会报错.可以通过如下几个步骤解决 第一步:去除eclipse的JS验证:将window ...
- thrift js javascript C# Csharp webservice
http://www.cnblogs.com/xxxteam/archive/2013/04/15/3023159.html 利用thrift实现js与C#通讯的例子 关键字:thrift js ja ...
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception processVob7 1. 1. javascript异常处理机制 ...
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
Atitit.js javascript异常处理机制与java异常的转换.js exception processVoae 1. 1. javascript异常处理机制 1 2. 2. Web前后台异 ...
随机推荐
- ZooKeeper典型应用场景一览
原文地址:http://jm-blog.aliapp.com/?p=1232 ZooKeeper典型应用场景一览 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据 ...
- Android gradle问题解决: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat
1. 问题描述: Android Studio在运行模拟器某些机型或者真机某些机型的时候发生闪退. 错误如下: Java.lang.RuntimeException: Unable to start ...
- puma vs passenger vs rainbows! vs unicorn vs thin 适用场景 及 performance
ruby的几个web server,按照开发活跃度.并发方案及要点.适用场景等分析puma vs passenger vs rainbows! vs unicorn vs thin. 1. thin: ...
- [js] js判断浏览器(转)
(function($, window, document,undefined){ if(!window.browser){ var userAgent = navigator.userAgent.t ...
- CentOS 6.5 EasyPR环境搭建
EasyPR是一款开源的中文车牌识别系统,项目地址. 在搭建的过程中,主要的问题是注意版本的兼容性,这里面的版本包括:opencv版本,g++版本以及cmake版本. 我使用的EasyPr版本信息如下 ...
- Windows下修改Oracle默认的端口1521
数据库最好不对公网开放,如果要开放,最好把默认端口改掉,防止一些针对 1521端口的入侵 1.找到 product\11.2.0\dbhome_1\NETWORK\ADMIN 下面的 listene ...
- How to create an anonymous IDA PRO database (.IDB)
Source: http://www.0xebfe.net/blog/2013/01/13/how-to-create-an-anonymous-ida-pro-database-dot-idb/ P ...
- CSS基础(三):选择器
常用选择器 元素选择器,即html标记如div,ul,li,p,h1~h6,table等. p { font-size:14px; } h1 { color:#F00; } 复合选择器, 由两个选择器 ...
- 国内的maven镜像
阿里云 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>ht ...
- 国行手机安装GOOGLE PLAY
原文地址:http://blog.sina.com.cn/s/blog_68cff87b0101a96k.html 相信国行的手机都是没有google Play 功能的吧,相比其它国外的手机,功能上逊 ...