10段JS使用代码.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.前言为了node.js做准备,js的基本功还是很重要的。所以正值1024程序员节的时候所以找了些题目,整理了一下知识点。这篇文章感觉代码太多,难免枯燥,所以文章最后留了个彩蛋给读者。 2.简单回调 代码 function foo(){ console.log(this.a); } function doFoo(fn){ fn(); } function doFoo2(o){ o.foo(); } var obj = { a: 2, foo: foo }; var a = Im an a; doFoo(obj.foo); doFoo2(obj); 分析 在Javascript中,this指向函数?执行时的当前对象,而非声明环境y有。 执行doFoo的时候执行环境就是doFoo函数,执行环境为全局。 执行doFoo2时是在对象内部调用函数,this指针指向该对象。 结果 Im an a 2 3、用apply改变函数作用域 代码 function foo(somthing){ console.log(this.a, somthing); } function bind(fn, obj){ return function(){ return fn.apply(obj, arguments); } } var obj = { a:2 } var bar = bind(foo, obj); var b = bar(3); 分析 apply、call、bind都有个作用就是改变作用域,这里用apply将foo函数的作用域指向obj对象,同时传入参数。 再简单分析一下bind函数内部的嵌套,执行bind函数的时候返回的是一个匿名函数,所以执行bar(3)的时候实际上是执行的bind内部的匿名函数,返回的是之前传入的foo函数的执行结果。 函数没有返回值的情况下默认返回undefined。 结果 2 3 undefined 4.new关键字 function foo(a,b){ this.val = a+b; } var bar = foo.bind(null, p1); var baz = new bar(p2); console.log(baz.val); console.log(b); 分析 bind函数的第一个参数为null代表作用域不变,后面的不定参数将会和函数本身的参数按次序进行绑定,绑定之后执行函数只能从未绑定的参数开始传值。 结果 p1p2 5.自执行函数 function foo(){ console.log(this.a); } var a = 2; var o = {a:3,foo:foo}; var p = {a:4}; (p.foo=o.foo)(); 分析 经常可以看到这样的代码 (function(){ //... })() 这种代码通常是创建一个立即执行的函数同时避免污染全局变量。 很少有人去关注赋值语句执行之后会返回什么结果,其实就是返回当前值。也就是说当括号内执行完赋值之后,返回的是o对象中的foo函数。函数的执行环境中有一个a对象,嗯,就是它了~ 答案 2 6.变量属性 var a = []; a[0] = 1; a[foobar] = 2; console.log(a.length); console.log(a.foobar); 分析 当一个变量被声明后,扩充其属性并不会改变原数据类型。 结果 1 2 7.精度问题 var a = foo; a[1] = O; console.log(0.1+0.2==0.3||a); 分析 当操作小数时请小心,js的小数计算并不精确,所以上面的判断是false。 字符串变量是常量。 结果 foo 8.命名提升 foo(); var foo = 0; function foo(){ console.log(1); } foo = function(){ console.log(2); }; 分析 声明的变量和命名函数都会被提升到代码的最前面,只不过声明的变量的赋值语句在代码中的位置不变。所以上面这段代码应该被理解为: var foo; function foo(){ console.log(1); } foo(); foo = 0; foo = function(){ console.log(2); }; 结果 1 思考 foo(); var foo = 0; function foo(){ console.log(1); } foo(); foo = function(){ console.log(2); }; foo(); 上面代码的结果: 1 报错 9、作用域 foo(); var

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档