js深层次知识点

来源:互联网 发布:cnki数据库在哪找 编辑:程序博客网 时间:2024/06/06 19:59
html5 新特性
css3
js 重载 多线程
百度搜索栏
淘宝导航栏固定
切片
正则表达式


闭包 :子函数可以使用父函数中的局部变量,这种行为就叫做闭包!,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大




callee返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文.
callee是arguments 的一个属性成员,它表示对函数对象本身的引用,这有利于匿名 
caller




使用这个属性要注意:
1 这个属性只有当函数在执行时才有用
2 如果在javascript程序中,函数是由顶层调用的,则返回null


caller返回一个函数的引用,这个函数调用了当前的函数;
callee返回正在执行的函数本身的引用,它是arguments的一个属性


1、每个函数都包含两个非继承而来的方法:apply()和call()。
2、他们的用途相同,都是在特定的作用域中调用函数。
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来(参数列表)。


”==”与”===”是不同的,一个是判断值是否相等,一个是判断值及类型是否完全相等
 第一个是相等符;
第二个全等符;
其中第一个在比较的时候,会进行类型转换,而第二个则不会,如:
alert('55' == 55);//true
alert('55' === 55);//false


Javascript Math ceil()、floor()、round()
ceil():将小数部分一律向整数部分进位。 
floor():一律舍去,仅保留整数。 
round():进行四舍五入 


js数据类型
 字符串、数字、布尔、数组、对象、Null、Undefined


js中创建函数的三种方式
第一种(函数声明): 
function sum1(num1,num2){
   return num1+num2;
}
第二种(函数表达式):
var sum2 = function(num1,num2){
   return num1+num2;
}
第三种(函数对象方式):
var sum3 = new Function("num1","num2","return num1+num2");


js实现(模拟)重载
但是我们确实是可以实现重载的,如果你用过jQuery,你就会深有体会,比如$("#btn").val() 是获取id为"btn"的按钮的value值,而$("#btn").val("点我")则是给id为"btn"的按钮赋值。那么JavaScript是怎么实现(准确地讲应该叫“模拟”)的呢?。
      答案很简单:arguments
        arguments是JavaScript里的一个内置对象,包含了调用者传递的实际参数,但不局限于函数声明所定义的参数列表,而调用时只它和数组一样有个length属性。function函数只不过是一种引用类型,当你第二次使用函数名定义函数时会把第一次定义的函数覆盖掉。Js 不会验证传递给函数的参数个数是否和函数定义的参数的个数相同,开发人员定义的函数都可以接受任意个数的参数(根据NetScript 文档,最多能接受25个) ,而不会引发错误,任何遗漏的参数都会用undefined 代替,多余的参数被将忽略。那就是在函数定义中用f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式。 




js 多线程
首先说一下JS的执行原理:js引擎执行js代码的时候是单线程的,即同一时刻只会有一个进程执行JS代码,回调函数也是一个一个执行的(按照事件发生的顺序,而不是代码的顺序)。JS中的异步通信和定时是由另外的线程实现的,脱离js线程上下文。以JS定时操作举例,当JS引擎执行setTimeout(callbackFunction, 100)操作时,它会通知定时线程我需要100毫秒的定时,之后JS引擎进入事件循环。100毫秒之后,定时引擎向事件队列中加入一个时间已到的事件。JS引擎从队列中读取时间已到的事件,执行callbackFunction。 如果同一时间有多个事件加入事件队列,JS引擎也只会一个一个的执行callback。对于异步也是同样,JS代码发起通信请求,通信线程执行通信操作,并在操作完成后将完成事件加入事件队列。JS引擎从队列中取出事件并调用回调处理通信结果。JS引擎在执行回调函数的时候,不能同时响应其他事件。


通常一个浏览器会至少存在三个线程:JS引擎线程(用于处理JS)、GUI渲染线程(用于页面渲染)、浏览器事件触发线程(用于控制交互)。    而因为JS可以操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程与GUI渲染线程是互斥的。也就是说当JS引擎线程处于运行状态时,GUI渲染线程将处于冻结状态。     JS引擎是基于事件驱动,采用的是单线程运行机制。即JS引擎会只会顺序的从任务列表中取任务,并执行。


SetTiemout:在指定的毫秒数后调用指定的代码段;SetInternal:在指定的时间间隔内(ms)循环调用指定的代码段。这两个函数内都涉及到时间计数器,也就是都涉及到一个类似与MFC定时器。JS引擎本身就只能单线程运行,因此定时器需要由其他的外部线程来启动。所以对JS引擎而言,定时器线程可以被视为异步线程。但当定时器时间到达后,所触发的事件则必须在任务列表中排队,等候JS引擎的处理。


js 双引号会搜索引号内的内容是不是有变量,有则输出其值,没有则输出原有内容。所以输出纯字符串的时候用单引号比双引号效率高,因为省去检索的过程。
单引号包含双引号的时候,里面的双引号不用转义,反之亦然.单引号和双引号基本都是一种概念,但是二者一起出现时,需要特别注意


切片简单的理解就是将视觉(UI)设计师设计好的界面图切成WEB所能使用的图片格式。
复杂点:切成图片还只是一小部分,还需要把设计师的界面图还原成能被浏览器能解析的html语言,如果有一些交互的效果,还需要javascript脚本语言做一些特效处理。一般而言切片需要做成浏览器可解析的HTML这步才算完成。 


JavaScript match() 方法
 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,检索到则返回匹配的子串的起始位置,无法检索到值,返回-1。
 charAt() 方法可返回指定位置的字符。请注意,JavaScript 并没有一种有别于字符串类型的字符数据类型,所以返回的字符是长度为 1 的字符串。
  charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。 方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
js中Array.prototype.map()方法。 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。


Array.prototype.map.call(obj,charFun)和Array.prototype.slice.call(obj).map(charFun)都达到了相同的效果,都将字符串,转换成了新的数组。















0 0