1 命名函数的赋值表达式

将命名函数赋值给一个变量。

var foo = function ss() {

ss();//正常运行

}

ss();//出错

ss函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo; 然而在ss 内部依然可见。这是由于JavaScript 的命名处理所致, 函数名在函数内总是可见的。

注意:在IE8及IE8以下版本浏览器ss在外部也是可见的,是因为浏览器对命名函数赋值表达式进行了错误的解析, 解析成两个函数 foo和ss。

2 方法的赋值表达式

将一个方法赋值给一个变量。

var ss = someObject.methodTest;

ss();

ss 就像一个普通的函数被调用;因此,函数内的 this将不再被指向到 someObject对象。而是指向了window

3 循环中的闭包

比较常见的错误出现在循环中使用闭包。

for(var i = 0 ; i < 55 ; i++){

setTimeout(function () {

console.log("我不做人了,jojo");

},1000);

}

上面的代码会输出文字55次。

当 console.log 被调用的时候,匿名函数保持对外部变量i的引用,此时 for循环已经结束,i的值被修改成了55。为了得到想要的结果,需要在每次循环中创建变量i的拷贝。为了避免引用错误,为了正确的获得循环序号,最好使用 匿名包装器(注:其实就是我们通常说的自执行匿名函数)。

3.argument对象

JavaScript 中每个函数内都能访问一个特别变量 arguments。这个变量维护着所有传递到这个函数中的参数列表。arguments变量不是一个数组(Array)。 尽管在语法上它有数组相关的属性 length,但它不从 Array.prototype 继承,实际上它是一个对象(object)。因此,无法对 arguments 变量使用标准的数组方法,比如 pushpop 或者 slice。 虽然使用 for循环遍历也是可以的,但是为了更好的使用数组方法,最好把它转化为一个真正的数组。

转化为数组:

创建一个新的数组,包含所有 arguments 对象中的元素。Array.prototype.slice.call(arguments); arguments 对象为其内部属性以及函数形式参数创建 getter 和 setter 方法。因此,改变形参的值会影响到 arguments 对象的值,反之亦然。

function ss(a,b,c){

arguments[0] = 2;

a;//2

b = 4;

arguments[1];//4

var d = c;

d = 9;

c;//3

}

ss(1,2,3);

4 定时器

手动清理定时器。

var jojo = setTimeout(ss,1000);

clearTimeout(jojo);

清除所有定时器。由于没有内置的清除所有定时器的方法,可以采用一种暴力的方式来达到这一目的。

for(var i = 0 ;i < 1000 ; i++){

clearTimeout(i);

}

可能还有些定时器不会在上面代码中被清除(注:如果定时器调用时返回的 ID 值大于 1000), 因此我们可以事先保存所有的定时器 ID,然后一把清除。建议不要在调用定时器函数时,为了向回调函数传递参数而使用字符串的形式。

function ss(a,b,c) {}

setTimeout('ss(1,2,3)',1000);//尽量不要这么做

//可以使用匿名函数完成相同的功能

setTimeout(

function() {

ss(1,2,3);

}

,1000)

绝对不要使用字符串作为 setTimeout 或者 setInterval 的第一个参数, 这么写的代码明显质量很差。当需要向回调函数传递参数时,可以创建一个匿名函数,在函数内执行真实的回调函数。避免使用 setInterval,因为它的定时执行不会被 JavaScript 阻塞。

容易遗忘的几个js知识点(一)相关推荐

  1. 容易遗忘的JS知识点整理

    1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法. hasOwn ...

  2. js知识点 掘金_关于webpack4的14个知识点,童叟无欺

    没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切. 最近工作中用到了nuxt,才发现,如果webpack学的6,nuxt基本不需要学习,没什么学习成本的,因此,这篇重新记录下webpa ...

  3. JS知识点笔记-常用方法

    JavaScript知识点范围:常用方法 标识:< script type = "text/javascript" \> 引入外部js文件:< script sr ...

  4. JS知识点总结(全)

    JS基础知识点总结 提示:有一些点没有展开,有问题的地方小伙伴们自己展开哦. 一.变量类型和计算 变量类型:undefiened.String.number.boolean.object({},[], ...

  5. node.js知识点

    一.定时器 setTimeout:定时执行,设置一个事件,等待事件到达的时候只执行一次,但是执行以后定时器还在,只是没有运行. setIntevral:循环执行,设置一个时间间隔,每个一段时间都会执行 ...

  6. 【node.js知识点(补充版)】

    文章目录 一.[定时器] 二.[变量] 三.[字符串] 四.[数组] 五.[数组方法] 六.[数据结构Set] 七.[请求方法] 八. [HTTP状态码] 九.[npm包管理] 十.[Math对象] ...

  7. node.js知识点总结

    一.当exports对象和module.exports对象指向的不是同一个对象时,以module.exports对象为准. 二.系统模块 // 1. fs.readFile() 读取文件 // 语法格 ...

  8. JaveScript运算符(JS知识点归纳三)

    JaveScript中有许多的运算符,在这里就只说明一些需要注意的. 01 一元运算符 一元:指的是参与运算的操作数只有一个 最经常使用的是++   -- 计算规则: ++/-- 前置于操作数的时候 ...

  9. 学java需要哪些js知识点_JS重要知识点

    /****************** 面向对象 ******************/ /********** 一:对象创建.原型链 **********/ /*讨论 构造函数(类方式)创建对象 , ...

  10. js知识点 掘金_掘金js

    js的基本类型有哪些?引用类型有哪些?null和undefined的区别. 如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种) Object是引用类型嘛?引用类型和基 ...

最新文章

  1. 基于Erlang语言的视频相似推荐系统 | 深度
  2. Django中pipeline操作Redis数据库
  3. 用纯CSS实现3D立方体效果
  4. SQL预编译防注入小测试
  5. 矩阵经典题目六:poj 3070 Fibonacci
  6. spring-test测试demo
  7. Kali渗透测试工具库(二)beef--Web浏览器攻击框架
  8. 关于负载均衡一些概念的正确理解
  9. excel 时间戳转换为日期
  10. 2021-10-18word2vec训练过程
  11. LaTeX数学公式环境
  12. Java 找不到符号 符号 类 SpringBootApplication
  13. 帆软软件FineReport考试题库FCRA题库
  14. 企业级客户端病毒清除工具 Damage Cleanup Service
  15. 用matlab作椭圆方程,用matlab做椭圆拟合方程
  16. window下Python查看已经启动的进程名称并关闭
  17. 北交桑基韬:“超”人的机器学习,非语义特征的得与失
  18. ubuntu 网卡总结
  19. cmake 基本命令 交叉编译配置 模块的编写
  20. EMIS快速开发平台 - 微服务版技术选型

热门文章

  1. 修改战网昵称服务器错误,暴雪又改了游戏平台名字 暴雪战网回来了
  2. 把两张图片并排(行)显示的HTML代码
  3. 对finecms模板的改造sql
  4. 程序人生 - 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
  5. (附源码)计算机毕业设计SSM会议管理系统
  6. 第二周——学习内存取证神器volatility的使用
  7. springBoot整合spring security实现权限管理(单体应用版)--筑基初期
  8. ggplot绘图之基本语法
  9. 腾讯Bugly,简单实用的崩溃日志收集
  10. ffmpeg 合并下载m3u8流媒体