js小点

js小点1:
function a (x) {
return x * 2;
}
var a;
alert (a);

js永远是先解析声明式函数,再解析变量,但不会赋值

执行顺序:
1,解析函数a
2,声明变量var a;此时a并没有赋值,所以a=function a

js小点2:
js中没有块的概念--比如for(var i in array)中的i依然是全局变量

js小点3:
function b (x, y, a) {
arguments[2] = 10;
alert (a);
}
b(1, 2, 3);

分析:在函数内部可以引用一个对象,它是arguments类似数组,但不是数组。它代表了函数实际接收参数的集合。可以通过下标对相应参数进行访问。如果修改此对象某些属性,如arguments[index],则被传进来的第index(如果有的话,下标从0开始)变量的值也会被修改。

arguments[2]类似数组,但不是数组,作用是赋值给相对应角标的变量

js小点4:
function a () {
alert (this);
}
a.call (null);

call方法接受多个参数,其作用是借用别人的方法当作自己的方法。这样能保证执行的时候this能够指向自己。call方法的第二个参数到最后一个参数是传给借用过来函数的。第一个参数是借用的对象,如果这个对象为空,那么将会作为全局window对象调用。即函数中的this指向window。

js小点5:
在采用定义式创建同名函数时,后创建的函数会覆盖先创建的函数。这种差别是由于JavaScript解释引擎的工作机制所导致的。
JavaScript解释引擎在执行任何函数调用之前,首先会在全局作用域中注册以定义式创建的函数,然后再依次执行函数调用。由于注册函数时,后定义的函数重写了先定义的函数,因此无论调用语句位于何处,执行的都是后定义的函数。
相反,对于声明式创建的函数,JavaScript解释引擎会像对待任何声明的变量一样,等到执行调用该变量的代码时才会对变量求值。
由于JavaScript代码是从上到下顺序执行的,因此当执行第一个example()调用时,example函数的代码就是首先定义代码;而当执行第二个example()调用时,example函数的代码又变成了后来定义的代码。

js小点6:

js是解释型语言而非编译型语言,代码在执行期才被解析器一行一行地动态编译和执行而不是执行之前完成编译
js边编译边执行

变量的声明在预编译期被处理,在执行期对所有代码来说都是可见的

变量的初始化过程发生在执行期而不是预编译期,执行期js解释器按照代码顺序进行解释执行

在js代码之前声明全局变量和函数并且为全局变量初始化赋值,在函数内部也应该先声明变量后引用

js小点7:
函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的

js小点8:

创建对象:
用var anObject=new aFunction()形式创建对象的过程实际上分为3步:
1,创建一个新对象
2,将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象
3,将该对象作为this参数调用构造函数,完成成员设置等初始化工作

对象建立之后,对象上的任何访问和操作都只与对象自身及其原型链上的那串对象有关,和构造函数无关
换句话说,构造函数只是在穿件对象是起到介绍原型对象和初始化对象的两个作用

原型链:
每个对象(指大括号括起来的object,不包括function,array)都会在其内部初始化一个属性,就是
_proto_,当我们访问一个对象的属性石,如果这个对象内部不存在这个属性,那么就会去proto里面找这个属性,
这个proto又会有自己的proto,就这样一直找下去

js小点9:数据类型的检测

判断数据类型可能想到的方法:
constructor、typeof、instanceof、Object.prototype.toString.call()

1、通过constructor属性
通过constructor属性获取类型的方法很容易被修改,不应该用来判断类型。

2、通过typeof
typeof是一个操作符,而不是个函数。
typeof的实际应用是用来检测一个对象是否已经定义或者是否已经赋值。
如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错。
typeof检测对象类型时一般只能返回如下几个结果:
number,boolean,string,function,object,undefined。
对于Array,Null,自定义对象 等使用typeof一律返回object,
这正是typeof的局限性。

3、通过 instanceof
用instanceof操作符来判断对象是否是某个类的实例。
如果obj instanceof Class返回true,那么Class的原型与obj原型链上的某个原型是同一个对象,
即obj要么由Class创建,要么由Class的子类创建。

4、通过 Object.prototype.toString.call()

Object.prototype.toString.call() 作用是:
1、获取对象的类名(对象类型)。
2、然后将[object、获取的类名]组合并返回。
可应用于判断Array,Date,Function等类型的对象

js小点10:

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

代码特点:
1,函数b嵌套在函数a内部
2,函数a返回函数b

当一个函数的内部函数被该函数之外的一个变量引用的时候,就创建一个闭包

闭包的作用是在函数执行完并返回后,是的javascript的垃圾回收机制不会回收当前函数所占用的资源
因为函数的内部函数的执行需要依赖该函数当中变量。

时间: 2024-10-09 21:29:32

js小点的相关文章

JS小插件之2——cycle元素轮播

元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <title> cycle demo </titl

js小游戏——看你能坚持多久

点击另存用到的图片. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" > <head

写个js小工具自动生成博文目录

我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到具体的内容,这样园友们在看博客的时候就可以很方便地浏览自己感兴趣的内容,但是遗憾的是博客园不支持博文目录的生成,好像也有园友给博客园提建议,希望能够像CSDN那样能够自动生成博文目录,但是不知道是什么原因,博客园一直都没有把这个功能加上去,既然没有,那我就自己做吧,研究了2天,总算是按照自己的设想做出来了,最终效果如下: 下面来介绍一下这个小工具的实现. 一.

js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)

本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座

JS小技巧大本事(持续更新)

1. 复制N个字符 1 String.prototype.repeat = function(num){ 2 return (new Array(++num)).join(this); 3 } 4 5 var a = 'A'; 6 a.repeat(5); //'AAAAA' 2. 替代if…else… 1 var result; 2 3 result = isTrue ? something : anotherthing; 4 result = something || anotherthin

js小技巧: 给div绑定keydown事件

要想给一个元素绑定keydown事件我们经常这样: $('#some_thing').keydown(function(event){ ...... }) 但是当你尝试给div元素绑定时会发现不起作用, 解决办法是给这个div添加一个tabindex的属性: $('#some_div').attr('tabindex', 1).keydown(function(event){ ...... }) js小技巧: 给div绑定keydown事件

一个js小游戏----总结

花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用webGl之类的,单纯的逻辑+对DOM的操作,算是一次试手吧,之所以没有继续去完善,是因为想要整合一下,各个模块要更清晰,大体的设计是按MVC来的,但是对控制器那一块还不满意,设计过程中比较得意的是碰撞检测吧,因为我用了一个数组来维护怪物的生灭,怪物产生则数组push,怪物消失则用splice来从数组中删

JS小插件之1——pager 分页

学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路. 此处代码写的是静态分页.如果需动态分页,还可以修改下.第一次写,还有很多地方可以优化.希望各位大牛踊跃拍砖. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <t

React.js小书总结

(迁移自旧博客2017 08 27) 第一阶段 react的组件相当于MVC里面的View. react.js 将帮助我们将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合.嵌套,就成了我们的页面. react.js 不是一个框架,它只是一个库.它只提供 UI (view)层面的解决方案.在实际的项目当中,它并不能解决我们所有的问题,需要结合其它的库,例如 Redux.React-router 等来协助提供完整的解决方法. 组件化可以帮助我们解决前端结构的复用性问题,整个页面可以