悟透JS

1, 在js中 “123” == 123,“0123” == 0123,”123” === 123,”123” !== 123,”123” != 123 有什么不同?
“123” == 123的值为true,”0123” == 0123的值为false,因为js中将“0”开头的整数常量当八进制数处理。如undefined==null返回true。
“123” == 123的值为true,”123” === 123的值为false,因为js中“===”表示全等,也就是数据值与数据类型都必须相等才是true。
”123” !== 123的值为true,”123” != 123的值为false,因为“!==”表示不全等,“!=”表示值不等。不全等即值或类型不相等,不全等相当于 ”123” !== 123 || typeof(“123”) != typeof(123)。全不等即值和类型都不相等,全不等相当于”123” !== 123 && typeof(“123”) != typeof(123)。

2, Underfinedhe和null
Undefined:代表一切未知事物,啥都没有,无法想象,代码更无法去处理。
Null:有那么一个概念,但没有东西,无中似有,有中还无,虽不可想象,但代码可以去处理。
Typeof(undefined)返回也是undfined。
Typeof(null)返回object。
Undefined == null 返回true

3, Function 函数
Js中创建function函数类型。定义式和变量式。
<script language="javascript" type="text/javascript">

function myfun(){
alert("hello");
}

myfun();//输出word

function myfun(){
alert("word");
}

myfun();//输出word

</script>

<script language="javascript" type="text/javascript">

var myfun = function (){
alert("hello");
}

myfun();//输出hello

myfun = function (){
alert("word");
}

myfun();//输出word

</script>


Js执行引擎并非一行一行地分析代码和执行程序的,而是一段一段地分析执行的。而且在同一段程序执行中,定义式的语句会被提取出来优先执行,函数定义完之后,才会顺序执行其他语句代码。
上面列子在定义式中,第一次定义的函数myfun被第二次定义的函数myfun覆盖,所以两次执行的是第二次的函数,而在变量式定义函数myfun中,函数看做变量改变过程来执行。

4, 作用域链
代码的时空:相对论告诉我们,时间和空间是不可分割的。我们只有把时间和空间结合起来才能确定一个事件发生的准确坐标。确定一个变量数据的执行时空,就是确定代码变量数据执行的上下文环境,即确定变量数据的作用域。

<script type="text/javascript" language="javascript">

var yourName = "you";
myName = "me";

function changeName(){
alert(myName+"==="+yourName);//me===undefined
var yourName = "your";
myName = "my"
alert(myName+"++++"+yourName);//my++++your
}
alert(myName+"---"+yourName);//me---you

</script>


在js中全局环境就是一个对象,这个对象就是js运行环境的根。对于浏览器中的js来说,这个根对象就是window对象对全局的js来说window对象就相当于当前作用域。
如:var yourName = "you"; //window作用域的一个变量yourName
myName = "me"; //window对象的一个属性myName
对于全局的js来说,加不加var都一样,不过在子作用域里就不一样了。
Var定义的是该作用域上的一个变量。而没有var标识的变量则需要在作用域链上查找变量,如果从子作用域到根定义中没有查找到该变量,则该变量为该作用域上的变量。反之既然。
在js中当代码运行进入一个函数时,js会创建一个新的作用域来作为当前作用域的子作用域。然后将当前作用域切换到这个新的子作用域,开始执行函数的逻辑。而js执行引擎会把此函数内的逻辑代码当做一个单元来分析执行。
Js执行步骤:
第一步:预编译分析,建立可调用的函数变量。将定义式函数直接创建为作用域上的函数变量,并将其值初始化为定义的函数代码逻辑;对于var标识的变量,将其初始化值为undefined。
第二步:解释执行代码,在预编译的环境中执行逻辑代码。当遇到函数名或变量名的使用时,js执行引擎会首先在当前作用域查找函数或变量,如果没有就到上层作用域查找,以此类推。对于子作用域和父作用域有相同的变量时,根据var来定义作用域。用var定义的变量只对本作用域有效,尽管父作用域中有同名变量都与本作用域变量无关,退出本函数(本作用域)后,var就失效了。
Js在执行函数时都会产生一个子作用域,退出函数后,这个子作用域就消失了,下次调用该函数是又会有另一个子作用域产生。而在该函数内在调用另外函数时,又会在该函数作用域的基础上产生一个子作用域,从而形成了一个作用域链。作用域链的根是js的根。

5, Caller

function callerA(){
alert("caller is "+callerA.caller);
}

function callerB(){callerA();}

callerA();//caller is null
alert(callerA.caller);//null

callerB();//caller is callerB(){callerA();}


caller是函数自身的一个属性,表示调用当前函数的父函数。如果caller值为null,表示函数没有被调用者或是被全局函数调用。函数的caller值是动态变化的,函数的caller的初始化值都是null。当调用一个函数数,代码已经运行在函数体内,被调用函数的caller属性就会设置为当前函数。在退出函数调用时,caller值又恢复为null。

6, 对象和函数的调用
<script type="text/javascript" language="javascript">

var obj = {};//var obj = function(){}
obj.aproperty = "a property";
obj.amethod = function(){alert("a method");}

alert(obj["aproperty"]);
obj["amethod"]();

for(var i in obj){
alert(i+"=="+typeof(obj[i]));
}

</script>

Js中的函数和对象既有对象特性和数组特性。
7, This 自我
<script language="javascript" type="text/javascript">

function whoami(){
alert("i am "+this.name+" of type: "+typeof(this));
}

var whoA = {name: "A"};
whoA.whoami = whoami;

var whoB = {name: "B"};
whoB.whoami = whoami;

whoA.whoami();//this作为whoA i am A of type: object
whoB.whoami();//this作为whoB i am B of type: object

whoami.call(whoA);//this作为whoA i am A of type: object
whoami.call(whoB);//this作为whoB i am B of type: object

whoB.whoami.call(whoA);//this作为whoA i am A of type: object
whoA.whoami.call(whoB);//this作为whoB i am B of type: object

whoami.whoami = whoami;
whoami.name = "I"
whoami.whoami();//this作为whoami i am I of type: function

</script>

Js中把this看着当前要服务的这个对象。
8, Json对象
<script language="javascript" type="text/javascript">
var json = {
name:"xiaohong",
age:"20",
say:function(){alert(this.name+" hello");}
};

json.say();
</script>

Json是js对象化的一种形式。如果要将一个json字符串转换成js对象,只需要使用eval函数就可以将json字符串转换为一个js对象。

9, js创建对象
js创建对象可以通过new操作符结合函数名来创建对象。
如:
function obj(){};
var o = new obj();//var o = {}; obj.call(o);

在js中先用new操作符创建一个对象,紧接着就将这个对象作为this参数调用后面的函数。

<script language="javascript" type="text/javascript">

function person(name){
this.name = name;
this.say = function(){
alert("I am "+this.name);
}
}

function emp(name, salary){
person.call(this,name);
this.salary = salary;

this.sal = function(){
alert(this.anme+" "+this.salary+"$");
}
}

var p = new person("xiaohong");
var e = new emp("xiaofang",1234);

p.say();//I am xiaohong
e.say();//I am xiaofang

e.sal();//xiaofang 1234$

alert(p.say==e.say);//false

</script>

上面代码表明:emp构造函数将自己的this作为参数调用person的构造函数,就是相当于调用基类的构造函数。
同时通过alert(p.say==e.say);//false,我们也可以看到在emp和person对象中确实各自保存了一份say代码体。
<script type="text/javascript" language="javascript">

function person(name){
this.name = name;
this.say = function(){
alert("I am "+this.name);
}
}

var p1 = new person("xiaohong");
var p2 = new person("xiaofang");

alert(p1.say==p2.say);//false

</script>

同一类的对象各自有一份代码是一种浪费,在js中我们可以同过this来指向同一份代码体。
<script type="text/javascript" language="javascript">

function say(){
alert("I am "+this.name);
}

function person(name){
this.name = name;
this.say = say;
}

var p1 = new person("xiaohong");
var p2 = new person("xiaofang");

alert(p1.say==p2.say);//true

</script>


<script type="text/javascript" language="javascript">

function person(name){
this.name = name;
}

person.prototype.say = function(){
alert("I am "+this.name);
}

var p1 = new person("xiaohong");
var p2 = new person("xiaofang");

alert(p1.say==p2.say);//true

</script>


10, prototype原型,原型链,继承,多态。
在js中所有function类型的对象都有一个prototype属性,prototype是对象的原型。它本身就是一个object类型的对象,以此我们可以给它添加任意类型的属性和方法。在构造函数的prototype上定义的所有属性和方法,都可以通过其构造的对象直接访问和调用。可以说prototype给一群同类的对象提供了共享属性和方法。
<script language="javascript" type="text/javascript">

function person(name){
this.name = name;
}

person.prototype.say = function(){
alert("I am "+this.name);
}

function emp(name, salary){
person.call(this,name);//调用基类的构造函数
this.salary = salary;
}

emp.prototype = new person();//建一个基类的对象作为子类原型的原型(原型继承)

emp.prototype.sal = function(){
alert(this.name+" "+this.salary+"$");
}

var p = new person("xiaohong");
var e = new emp("xiaofang",1234);

p.say();//I am xiaohong
e.say();//I am xiaofang

e.sal();//xiaofang 1234$

alert(p.say==e.say);//true

</script>


在js中prototype有寻根问祖的天性,当一个对象那里读取属性或调用方法时,如果该对象自身不存在这样的属性或方法,该对象就会去关联的prototype对象那里寻找,如果自己关联的prototype那里没有,就会去prototype自己关联的前辈的prototype那里寻找,直到找到或者寻找到根为此。
对象的属性和方法追溯机制就是通过prototype链来实现的。当用new操作符来构造函数对象时,也会同时将构造函数的prototype对象指派给新创建的对象,成为该对象的内置的原型对象。内置的原型对象本身也是对象,也有自己关联的原型对象,这样就可以形成原型链。
原型链的最底端,就是Object构造函数prototype属性指向的那一个原型对象。Js中所有的构造函数都是继承于该原型对象。这被称作原型继承。
Js中子对象可以掩盖父对象的属性和方法,即重写了父对象的属性和方法,这种掩盖机制实现了js的多态。

11, 闭包
function a(){
   var i=0;
   function b(){
   alert(++i);
   }
   return b;
  }
  var c = a();
c();


这段代码有两个特点:
  1、函数b嵌套在函数a内部;
  2、函数a返回函数b。
  这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
  在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。
那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。
1、保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。
  2、在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。
以上两点是闭包最基本的应用场景,很多经典案例都源于此。

在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

12, 网页运行原理
当打开一个网页时,浏览器会创建一个窗口,这个窗口就是一个window对象,也就是js运行所依附的全局环境对象。为了加载网页文档,当前窗口将为要打开的网页创建一个document对象,然后将网页加载到这个对象中,网页的内容加载就是在这个过程中一边加载一边呈现出来的。js代码也是伴随这个过程,一边加载一边执行的。对于外部js可能会分配多个线程去完成加载,但浏览器也会等待需要的js文件加载完成后,最终安正确的顺序来执行js代码。
进行加载和执行的目的,是为了建立文档对象模型(DOM)的主框架。这个主框架是有当前文档窗口的主线程来处理,并依照样顺序进行的。而网页中可以异步加载其他附属资源,如图片,声音,视频等多媒体数据,是被安排给其他线程去处理的。
浏览器中有多少个线程可以同时加载网页内容?web标准有一个限制,就是对同一个域名最多只允许使用两个连接来读取内容,大多数浏览器都遵循这一标准。就是说同一个域名的情况下,只有两个线程可以同时加载内容,其他的会处于等待状态。因此,浏览器使用多少个线程在同时加载网页,要看网页内容涉及多少域名。一个域名两个线程,多了就会堵塞。
当网页主框架加载和执行完毕,浏览器才开始触发window对象或body对象的onload事件。在极少的情况下,网页如果没有body对象,浏览器会在网页加载完后自动创建一个body对象,并将其设置为document的body属性。Window对象和body对象事件是相通的,就是说,要么设置window对象的onload事件,要么设置body对象的onload事件,只能有一个起到作用。甚至在ie中两个onload事件就是同一个东西,设置一个就意味着改变了另一个。
当网页主框架加载执行完成,由此引发的事件也处理完毕,js就暂停执行以等待下一次被触发的时机。如点击,定时刷新等功能被触发,js执行引擎将再次起到,执行相应的js代码。
可以认为js总是被动执行的,并且js绝对是单线程的,不管是窗口主线程加载的js代码,还是外部js代码,以及触发执行的js代码执行,都是在一个单一的线程中执行的。甚至在一个浏览器进程中,不同窗口对象的相对独立的js代码也是在同一个线程里执行的。也就是说,你打开一个浏览器之后。不管你在浏览器进程中开启了多少个页面,新打开多少个窗口,里面的所有js代码都是有同一个线程来执行的。即一个浏览器进程中所有的js代码是串行执行的。除非再打开一个浏览器,创建一个新的浏览器进程。
同时,在网页编写js脚本时,不能太自私编写大量耗时的js脚本。这样可能给在同浏览器其他页面脚本堵塞,从而导致用户体验不好。


13, 文档对象模型
DOM这个术语反映了三个意思:一是“文档”,它表示是一份文档,即网页。二是“对象”,它表示是由一个个可操控的对象构成的。三是“模型”,他表示一个树型结构,一个可编程的模型。
可以这样认为,dom就是一棵树,一棵会开花的树,长在js必经的路旁,为的就是要和js结一段尘缘。只要轻拂一下js,就能让dom翩翩起舞,让dom展现多彩的页面。
Dom对象本质并不是一个纯粹的js对象,他是紧凑的本机数据对象,这些对象大都是以本机二进制的接口模型出现。在ie中dom对象是一个个com接口对象。而在Firefox中也有自己的接口模型。在浏览器扩展开发的工作中,我们可以直接建立相关dom对象的接口,并通过访问接口的属性和方法来操作dom对象。
14, Js跨域
浏览器对于网络上的链接会有一些限制,这些限制包括XMLHttpRequest的限制,网络浏览器不会允许脚本去对它本身所在的server之外的server直接链接。
在网络中要实现跨域有两种方法:一是多个不同域名的服务器进行通信,服务器间不受域名的安全限制。二是客户端和多个服务器端进行请求通信,浏览器在这种跨域请求的时候,会受到浏览器的安全限制。
服务器间的跨域访问可以通过服务器代理,web service等来实现跨域访问,不受跨域限制。
客户端直接对服务器端的跨域访问,可以通过动态的js来实现。
一, 动态的script标签实现跨域访问。
本方案利用js脚本动态插入script标签,利用该标签的src属性向服务器端发出请求(可带参数),src属性可指向一个服务器端的处理程序或脚本。如jsp php action等。服务器段通常返回一段js代码,当js代码返回给客户端的时候,js代码就会被执行,从而导致异步跨域名通信的目的。
通常情况下,服务器端返回的是一个回调函数,该函数的参数已经在服务器端被填充,该回调函数(带着被填充的参数)就会被执行。
客户端:
<script language="javascript">
function callback(arg){
alert("this is "+arg);
}

function getRequest(){
var jsobj = document.createElement("script");
jsobj.src = "http://172.16.23.53:8088/DMS1.0/login/test_test.action?name=aaaaa";
document.body.appendChild(jsobj);
}

</script>
<body>
<input type="button" value="click" onclick="getRequest();"/>
</body>


服务器端:
<%
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.print("callback("+data+")");
%>

二, Iframe实现跨域

客户端:

<script language="javascript">

function client(name){
alert("client method "+name);
}

function envoy(url, method, callback){
var frame = document.createElement("iframe");
frame.style.width = 0;
frame.style.height = 0;
frame.style.visibility = "hidden";

var params = [];
for(var i=3; i<arguments.length; i++){
params.push( arguments[i]);
}

frame.contentWinddow.name = params;

var url = "http://"+url+" #"+method+"/"+callback+"@"+location.host;
frame.contentWindow.location= url;

}

envory(“url”,”service”,”client”,”testparam”);
</script>


服务器端:

<body>
<script language="javascript">

function service(arg){
alert("service method is "+arg);
return “service”;
}

if(!parent || parent == this){
alert(“parent”);
}else{
var command = location.hash.substring(1);
var i = command.indexOf("/");
if(i>0){
var j = command.indexOf("@");
var callback = command.substring(i+1, j);
var domain = command.substring(j+1);
var method = command.substring(0,i);

command = method+"("+window.name+")";
var result = eval(command);

window.name = result;

window.location = "http://"+domain+”#”+callback;
}else{
command = command+"("+window.name+")";
parent.eval(command);
}
}

</script>
</body>
【游戏开发】初识寻路&navmesh,探索RecastDemo 在手游时代,尤其对于大世界游戏而言,寻路的实现基本在专门的寻路服务器上进行。在众多寻路的解决方案中,recastnavigation是最为经典实用的一个,很多游戏甚至游戏引擎都采用类似的实现。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。因此,作为初学者的笔者,也决定通过RecastDemo去初步认识寻路的机理奥秘。 构建RecastDemo 首先克隆recastnavigation项目,从文档中可以看到Recast 阅读详情

相关推荐

保姆级教程:在STM32CubeIDE上快速部署micro_ros到STM32F407(附常见问题解决)

本文提供了一份详细的保姆级教程,指导开发者如何在STM32CubeIDE上快速部署micro_ros到STM32F407微控制器。内容涵盖从Windows与Ubuntu双环境搭建、micro-ROS静态库编译、STM32CubeIDE工程深度集成,到串口通信联调与常见问题解决的完整流程,旨在帮助读者构建稳定可靠的ROS2与嵌入式设备通信系统。

o4p5q6r7s的博客 324

js中123==123为false的问题--写成123=="123"即可解决问题

项目中遇到过一个问题,js拿到后台返回的一个数字,在if中判断时,出现类似123==123为false的结果, 初步分析原因,应该是返回的是string类型的,但拿来比较的是个number类型的,所以两者不相等。 写成a=="123",返回true,解决。 在chrome的console下,经测试"123"==123为true, 如下代码测试: var s="123";--undefi...

weixin_30682415的博客 1183

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 309

js 字符串“123”,变成整数123,不用parseInt 函数

1 var s = "123"; 2 console.log(s.charAt(0)*100+s.charAt(1)*10+s.charAt(2)*1); 转载于:https://www.cnblogs.com/angle-happy/p/5926715.html

dianduojian8843的博客 1338

Python爬取腾讯视频m3u8加密流实战(附完整代码)

本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。

weixin_29090089的博客 1609

问题:dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)

 1. 问题:Ubuntu安装软件的过程中出现依赖项的问题 “E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).” 按照指示执行如下两条命令都没有解决问题。 sudo apt-get -f install sudo apt-get --fix-broken ...

gloria_littlechi的博客 2万+

《悟透JavaScript》到货了

本书专题:《悟透JavaScript 》专题 从一篇博客到一本书,李战的《悟透JavaScript》于2008年11月4日出版。 博客园进了一些《悟透JavaScript》进行销售,销售代理商是沪江网店。 在《悟透JavaScript》签名折扣预订预订的用户,麻烦您将您在沪江网店的帐户通过短消息发给我们。 沪江网店购买 当当网购...

weixin_30483013的博客 79

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linuxschedule()函数的原理和调用的时机 schedule()函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice命令) 多级反馈队列调度 时间片轮转 使用nice命令 聊内存分配,进程内存分配,段页式存

大模型大数据攻城狮的专栏 4169

我要喷喷《悟透JavaScript》

花了我一早上的时间,看完这本(美绘本)的JavaScript书;一边看,一边心里骂道,这是在坑爹吗? 虽然这本书是2008年出的,当时我我刚刚参加工作,不知道JavaScript是甚;现在喷它好像有点鞭尸的味道。但不喷不能平我愤! 在我看来,这本书的名字不对;应该叫 观音姐姐教你JavaScript+写个围棋程序吧+ASP.NET Ajax广告部分;当然我想出版商是不会同意这样的名字...

hite 的小宇宙 203

超详细!Linux 服务器 6 大核心性能测试(附自动脚本 + 结果分析秘籍)---Linux 服务器性能测试文档

本文档旨在提供 Linux 服务器的 CPU、内存和磁盘性能测试方案,包括详细的测试大纲、操作步骤以及一键化测试脚本,帮助管理员快速评估服务器性能状况。通过以上测试方案,可以全面评估 Linux 服务器的 CPU、内存和磁盘性能,为系统优化、容量规划和问题排查提供重要参考依据。使用 sysbench 进行 CPU 基准测试。使用 sysbench 测试内存读写性能。使用 fio 工具进行更全面的磁盘测试。使用 dd 命令测试磁盘顺序读写性能。使用 dd 命令测试内存读写速度。记录磁盘 IO 性能。

jundao1997的专栏 381

【音视频 ffmpeg 学习】 RTMP推流 mp4文件

3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。2.RTMP协议中基本的数据单元称为消息(Message)。下载地址:http://nginx.org/download。下载 rtmp模块 到nginx 模块下。安装nginx 和 rtmp模块。(1). linux 环境准备。下载nginx安装包。使用 vcl 播放流。

weixin_45397344的博客 2276

终于看完了《悟透JavaScript》,大有收获

终于完整地看完了,悟透Javascript,呵呵,也算是一个里程碑,接下来,我要进行一些编码练习了,希望一个不错的基础,能够为我接下来的编码练习带来好处。 目标,用JS写一个firefox的插件。以锻炼我的JS能力。 转载于:https://blog.51cto.com/6221123/1081850...

weixin_34038652的博客 94

【精细解读】xapp585(多通道LVDS接口ADC)

xapp585的参考设计有Verilog和VHDL两种源码。

FPGA艺术家的博客 532

《悟透JavaScript》感谢语javascript

摸到她了!青翠的衣衫,奶白的肌肤,捧在手上的感觉真是太好了,心里美滋滋的。《悟透javascript》,一本偶然之作,终于成书并出版了。本书源于一篇同名博文,后经扩展和增加大量新内容,演变成了今天的这本书。 首先,要感谢博文视点总经理郭立女士,以及著名it图书编辑孙学瑛老师。没有她们的指点和辛勤付出,就没有这本书的诞生。 其次,要感谢博客园及园子里的各位老师和朋友。没有博客园这片沃土,也不

chaoxidawang的专栏 409

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《悟透JavaScript 》专题上线

立即访问《悟透JavaScript 》专题 转载于:https://www.cnblogs.com/bookshop/archive/2008/12/05/1348209.html

weixin_30613727的博客 82

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《悟透JavaScript》犹抱琵琶半遮面

没有千辛万苦,只有快乐无穷,看不见周折曲弯,只有笑声不断…… 《悟透JavaScript》已经初步排定,上市日期指日可待·#$$%^&%^&^* 这本书的封面也确定了。大家可以猜猜下,封面模特也在园子里出现过哦! 转载于:https://www.cnblogs.com/designbook/archive/2008/09/16/1291543.ht...

weixin_30612769的博客 83

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《悟透JavaScript》基本完稿了!

非常非常开心而兴奋地告诉大家,又一本经典即将诞生在博客园征途上——《悟透JavaScript》!这本书起源于李战老师的一篇受众人追捧的博客,此博客一粘贴出来就得到了24382人次的阅读量,大家都给出非常高的评价,同样也引发我们领导的无比重视,夜里9点发短信说:“博客园出了个李战,非常厉害,争取过来吧!” 等第二天上班,根本等不急的领导迅速地与李老师取得联系,并很快确定了选题...

weixin_30287169的博客 104

闭关编辑《悟透JS》了

大家期盼的《悟透JS》图文均已全部交稿了。看着非常享受呀!所以决定闭关做好这本书。有写书需求的同学们尽量发邮件,不要MSN啦! 为了不让大家失望,在编辑过程当中有些问题请大家来确定下: 1 书名《悟透JS》,我觉得还是保留,漫画配得虽然时尚,但还是基本上没有走失风格,大家如果有什么好的建议请随时与我和李战老师联系。 2 漫画用色比较少,不知道大家爱看彩色的呢,还是双色的?双色...

weixin_30537391的博客 81

悟透javascript

《悟透javascript》这本书以一种通俗易懂的幽默形式,讲述了es6之前版本的js精髓,也是大众吐槽的部分,因为 js与很多语言很不一样,没有类,没有严格的类型,没有那么多界限,至有灵活的使用方式,有一种无论怎么编写代码 都不会出错的感觉,而这一份灵活给有语言其他语言基础的人很大困扰,所以前端经常被自己嫌弃,因为js的不严谨。 但我觉得这也是js简单之处。 而这本书一直围绕一...

dichaojiu7150的博客 253

[转帖]转一篇JS好文《悟透JavaScript》

导读:   转一篇JS好文《悟透JavaScript》   原帖地址:http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html   引子   编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。   数据天生就是文静的,总想保持自己固有的本色;而代码却天生活

万里船的专栏 489

《悟透JavaScript》诞生历程精美配乐视频

http://www.tudou.com/programs/view/FvU5NoPoKC8/ 这里没法播,只能先换个形式吧: 我是怎样诞生的? 这样的吗? 话说:一位超级喜欢的在写了 引来一阵惊呼 既然这样,就出版成著作吧,让更多受益!那怎么变呢? 在思考的过程当中,我们经历了沉痛的5.12 兴奋...

weixin_30888413的博客 89

悟透JavaScript(理解JS面向对象的好文章)

悟透JavaScript(理解JS面向对象的好文章)引子编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。数据天生就是文静的,总想保持自己固有的本色;而代码却天生活泼,总想改变这个世界。 你看,数据代码间的关系与物质能量间的关系有着惊人的相似。数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态。而代码就象能量,他存在

前端大白话 1015

悟透JavaScript

编程世界里只存在两种基本元素,一个是数据,一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。     数据天生就是文静的,总想保持自己固有的本色;而代码却天生活泼,总想改变这个世界。 你看,数据代码间的关系与物质能量间的关系有着惊人的相似。数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态。而代码就象能量,他存在的唯一目的,就是要努力改变数据原来的状态。

我的Github 4万+
上一篇: JS入门经典
下一篇: 高性能网站建设指南
xmong
博客等级 码龄19年 33粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值