一、函数声明和函数表达式的区别:

  • 函数声明放在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指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)的更多相关文章

  1. 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){ con ...

  2. js对象数组中的某属性值 拼接成字符串

    js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...

  3. js判断对象数组中是否存在某个对象

    1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...

  4. 原型模式故事链(4)--JS执行上下文、变量提升、函数声明

    上一章:JS的数据类型 传送门:https://segmentfault.com/a/11... 好!话不多少,我们就开始吧.对变量提升和函数声明的理解,能让你更清楚容易的理解,为什么你的程序报错了~ ...

  5. JavaScript(js)函数声明与函数表达式的区别

    在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的. 函数声明与函数表达式用代码写出来是这 ...

  6. JS 函数提升&变量提升以及函数声明&函数表达式的区别

    感谢原文作者:迟早会有猫 原文链接:https://www.cnblogs.com/SidselLoong/p/10515809.html 今天看js的变量提升问题,里面提到了函数提升.然后发现自己之 ...

  7. 【JS】函数提升变量提升以及函数声明和函数表达式的区别

    今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...

  8. js中的函数声明和函数表达式的区别

    目录 一.声明与表达式的格式 1.1 声明式的格式: 1.2 表达式的格式: 二.区别 2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以. 2.2 函数表达式可以被提前解析出来 2.3 命 ...

  9. JS中的提升(即变量和函数声明移动到代码顶部)

    先看代码(第一个代码片段): console.log(a); var a = 1; 如果你认为这是一段不合法的代码,在调用console.log()的时候会输出undefined,你完全正确.但是如果 ...

  10. javascript中函数声明和函数表达式的区别 分类: JavaScript 2015-05-07 21:41 897人阅读 评论(0) 收藏

    1.js中函数表达式的定义 表达式(expression)JavaScript中的一个短语,javascript会将其计算(evaluate)出一个结果.程序中的常量是一个最简单的表达式.变量名也是一 ...

随机推荐

  1. PAT(B) 1037 在霍格沃茨找零钱(Java)

    题目链接:1037 在霍格沃茨找零钱 (20 point(s)) 题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle) ...

  2. 【优先队列】Function

    Function 题目描述 wls有n个二次函数Fi(x)=aix2+bix+ci(1≤i≤n).现在他想在且x为正整数的条件下求的最小值.请求出这个最小值. 输入 第一行两个正整数n,m.下面n行, ...

  3. 两个gif图片动画效果

    <div className="uploading-animation-tip-wrap"> <img src={require('~/shared/assets ...

  4. hdu 6625 three array (01-trie)

    大意: 给两个数组$a,b$, 要求重排使得$c_i=a_i\oplus b_i$字典序最小. 字典树上贪心取$n$次, 然后排序, 还不知道怎么证. #include <iostream> ...

  5. 递推问题 hdu 2046 与1143的比对

    2046 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:   Input 输入数据由多行组成,每行 ...

  6. 【转载】在windows上部署使用Redis

    下载Redis 在Redis的官网下载页上有各种各样的版本,我这次是在windows上部署的,要去GitHub上下载.目前的是2.8.12版的,直接解压,在\bin\release 目录下有个压缩包, ...

  7. Self寄宿

    static void Main(string[] args) { //Assembly.Load("WebApplication1, Version=1.0.0.0, Culture=ne ...

  8. 目标进程已退出,但未引发 CoreCLR 启动事件

    目标进程已退出,但未引发 CoreCLR 启动事件.请确保将目标进程配置为使用 .NET Core.如果目标进程未运行 .NET Core,则发生这种情况并不意外 解决:更新SDK版本

  9. English-培训6-Do you like rap?

  10. php协议任意文件读取

    php://filter/read=convert.base64-encode/resource=index.php