JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)
一、函数声明和函数表达式的区别:
- 函数声明放在if——else语句中,在IE8中会出现问题
- 函数表达式则不会
<script>
if(true){
function f1(){
console.log("我是第一个函数");
}
}else{
function f1(){
console.log("我是第二个函数");
}
}
f1();//我是第一个函数
f1();//我是第二个函数(IE8)
//函数声明的函数,放在if--else语句中,在IE8中显示的不一样
//但是当使用函数表达式的方法,却不会
if(true){
var f2=function(){
console.log("我是第一个函数");
}
}else{
var f2=function (){
console.log("我是第二个函数");
}
}
f2();//我是第一个函数
</script>
二、函数中的this指向的问题
- 普通函数中的this------------window
- 定时器中的this---------------window
- 构造函数中的this------------实例对象
- 对象。方法中的this----------当前的实例对象
- 原型方法中的this----------实例对象
- 严格模式下的this-----------undefined
<script>
//1.普通函数中的this------------window
function f1(){
console.log(this);
}
f1();//Window
//2.定时器中的this---------------window
setInterval(function(){
console.log(this);//Window
},1500)
//3.构造函数中的this------------实例对象
//4.对象。方法中的this----------当前的实例对象
//5.原型方法中的this----------实例对象
function Person(){
this.name=name;
this.show1=function(){
console.log(this);
}
}
Person.prototype.show2=function(){
console.log(this);
}
var per=new Person("小明");
per.show1();//Person {name: "", show1: ƒ}
per.show2();//Person {name: "", show1: ƒ}
//6.严格模式下的this-----------undefined
function f2(){
"use strict";
console.log(this);
}
f2();//undefined
</script>
三、函数不同的调用方式
- 普通函数-------直接函数名()
- 构造函数-------通过new来调用,创建对象
- 对象方法------点语法,对象.方法调用
四、函数也是对象,对象不一定是函数
- 函数有prototype原型,是对象,对象中有__proto__,原型是对象
- 如果一个对象里面有prototype又有__proto__,既是原型也是对象
- Math是对象,但是没有__proto__,不是函数
- 所有的函数实际上都是Function的构造函数创建出来的实例对象
五、数组中的函数调用(forEach)
<script>
var arr=[
function f1(){console.log("f1函数")},
function f2(){console.log("f2函数")},
function f3(){console.log("f3函数")},
function f4(){console.log("f4函数")}
];
arr.forEach(function(ele){
ele();//f1函数 f2函数 f3函数 f4函数
});
</script>
JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)的更多相关文章
- 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别
闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){ con ...
- js对象数组中的某属性值 拼接成字符串
js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...
- js判断对象数组中是否存在某个对象
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- 原型模式故事链(4)--JS执行上下文、变量提升、函数声明
上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~ ...
- JavaScript(js)函数声明与函数表达式的区别
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的. 函数声明与函数表达式用代码写出来是这 ...
- JS 函数提升&变量提升以及函数声明&函数表达式的区别
感谢原文作者:迟早会有猫 原文链接:https://www.cnblogs.com/SidselLoong/p/10515809.html 今天看js的变量提升问题,里面提到了函数提升.然后发现自己之 ...
- 【JS】函数提升变量提升以及函数声明和函数表达式的区别
今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...
- js中的函数声明和函数表达式的区别
目录 一.声明与表达式的格式 1.1 声明式的格式: 1.2 表达式的格式: 二.区别 2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以. 2.2 函数表达式可以被提前解析出来 2.3 命 ...
- JS中的提升(即变量和函数声明移动到代码顶部)
先看代码(第一个代码片段): console.log(a); var a = 1; 如果你认为这是一段不合法的代码,在调用console.log()的时候会输出undefined,你完全正确.但是如果 ...
- javascript中函数声明和函数表达式的区别 分类: JavaScript 2015-05-07 21:41 897人阅读 评论(0) 收藏
1.js中函数表达式的定义 表达式(expression)JavaScript中的一个短语,javascript会将其计算(evaluate)出一个结果.程序中的常量是一个最简单的表达式.变量名也是一 ...
随机推荐
- Scratch(一)为什么你要学Scratch儿童编程
因为人工智能和机器人学科的崛起,似乎一夜之间未来就变成了程序员的天下,尤其是在知乎上,不会编程都没办法和这群程序员好好说话了.我已经搬了一辈子砖了,难道我的孩子也还要接着搬?这就是现在大部分家长的焦虑 ...
- react实现提示消息容器,可以动态添加,删除内部子提示消息
import React, { useState, useRef, useEffect } from 'react' import PropTypes from 'prop-types' import ...
- stdmap 用 at() 取值,如果 key 不存在,不好意思,程序崩溃。QMap 用 value()取值,如果 key 不存在,不会崩溃,你还可以指定默认值
我觉得 Qt6 最应该升级的是容器类 stdmap 在遍历的时候,同时获取 key 与 value 非常方便: for(auto& var:map){ qDebug()<<v ...
- Sonya and Matrix Beauty CodeForces - 1080E (manacher)
大意: 给定$nm$字符串矩阵. 若一个子矩形每一行重排后可以满足每行每列都是回文, 那么它为好矩形. 求所有好矩形个数. 一个矩形合法等价于每一行出现次数为奇数的最多只有一个字符, 并且对称的两行对 ...
- 记录MindSphere On Cloud Foundry的一次尝试过程
试验背景: 开始时间:2019年12月11日 结束时间:2019年12月13日 自己编写一个后台程序,尝试推送到Cloud Foundry上,并开放从MindSphere以外访问的权限. 程序实现以下 ...
- 单例模式详解以及需要注意的地方(Singleton)
单例模式,顾名思义,就是在Java程序中只有唯一一个实例,这样做的好处是可以在不需要多个实例的对象采用单例模式可以节省内存,否则会造成不必要的内存浪费.单例模式的定义为:保证一个类只有一个实例,自己可 ...
- wepy框架 怎么在template模板中使用函数
呵呵.介绍说是类似vue,用起来真累人,就想在模板中使用个函数都要查N久的文档才知道. 具体要怎么操作呢? 要先创建个wxs脚本文件,在里面定义函数或其它的,然后在页面或组件中引入这文件,就可以在模板 ...
- Ext之页面多次请求问题(下拉框发送无关请求)
extjs 下拉框在拉取本地数据,然后又要展示后台数据时,出现过此问题(加载页面,自动发送无关的请求导致后台出现错误日志) { xtype:'combo', id:'state', width:130 ...
- javascript中bind()、call()、apply()的使用
一直以来对bind().apply().call()这三个方法都模模糊糊的,现在有时间详细的看看这三个方法,并记录下来. bind() 参考文档:https://developer.mozilla.o ...
- kvm虚拟化环境的搭建
首先搭建kvm的虚拟化环境,我选择的环境是在vmvare上的Centos 7的虚拟机,在该环境上搭建kvm的虚拟化环境 1:安装虚拟机(该过程自行安装) 2:操作系统环境的设置 (1)修改内核模式为兼 ...