函数

Var 是js的关键字,用于声明变量,声明在内存模块完成,定义(=)是在执行模块完成。

Var可以在内存模块提前(js代码执行前)完成所以有变量提升这个功能。

因为a没有带var,所以不存在变量提升,浏览器会把他当成window的属性。

Function也是js的关键字,用于声明和定义函数的,声明和定义都在内存模块完成了。

Function 也是内存模块提前完成,所以有函数提升这个功能。

变量提升和函数提升 都叫预解释。都是浏览器的。

1.函数的定义

函数是通过function定义的,function 后跟的是函数名。

结构语法

function fn(){}

通过上图我们可以发现,内存模块只存var的变量名。而存function整个代码块,因为声明和定义同时完成的

2.函数结构注意事项

1)函数名fn可有可无 有名的叫有名函数 无名的叫匿名
2)一定要带小括号() 里面放参数

3)函数定义 与 函数调用
定义 通过function 定义 function fn (){}

3.函数定义的四种方式

1)声明式定义 function fn() {}
2)表达式定义 var fn=function() {} 匿名函数

3)自调用 定义和调用同时完成

(function(){})(   )
~function(){}()        ~
+function(){}()         +
-function(){}()          -
!function(){}()          !

4)通过 对象的形式 var as=naw Function(){}

4.函数调用

函数最大的优势 会形成一个独立的模块 可以按需使用 可以重复使用
1)按需使用 可以提升性能 重复使用 可以减少冗余
2)函数调用的过程
函数执行时会形成一个自己的私有作用域 最大的作用域是window

然后执行函数里面的代码块

5.作用域链

作用域链:函数内部的变量被调用时 首先会在自己的私有作用域下查找是否有这个变量
有就直接用 没有就会向他的上一级查找 父级就是用父级的 父级没有就会以此继续向上查找
直到window为止 widnow有就使用 没有就is not defined 这种查找机制我们叫作用域链

分析图

6.函数递归:函数内部调用自身

分析图

7.break和continue

break和continue
break 终止当前程序
continue 跳出当前的程序 执行下一个
break和continue只能用在循环语句中
如果条件语句想使用break只能使用return

1)return  返回的

每个函数都有一个返回值 如果函数人为return了 返回什么就是什么
如果没有人为返回 结果就是undefined 并且return后面的代码不在执行了

案例分析

分析图:

函数内部的return不影响内部的预解释

函数内外的变量

函数外的变量 叫全局变量 函数内的变量叫私有变量
看变量归谁 看他在哪个作用域下声明
私有变量的种类
1.在私有作用域下声明的
2.通过函数传参的叫私有变量

8.函数传参     arguments参数

1)Function fn(a,b,c,d){}  将a b c d 叫参数

分析图

2)形参实参

形参   定义上的参数

实参   执行上的参数

也可以直接赋值

从零开始的全栈工程师——js篇2.6的更多相关文章

  1. 从零开始的全栈工程师——js篇2.5

    数据类型与全局属性 js的本质就是处理数据 数据来自于后台的数据库所以变量就起到一个临时存储数据的这作用ECMAscirpt 制定了js的数据类型 一.数据类型 1.基本数据类型 基本数据类型就是简单 ...

  2. 从零开始的全栈工程师——js篇2.1(js开篇)

    JS开篇 一.js介绍 全称 javascript 但不是java 他是一门前台语言 而java是后台语言js作者 布兰登·艾奇 前台语言:运行在客户端的后台语言:跟数据库有关的 能干什么?    页 ...

  3. 从零开始的全栈工程师——js篇(闭包)

    闭包是js中的一大特色,也是一大难点.简单来说,所谓闭包就是说,一个函数能够访问其函数外部作用域中的变量. 闭包的三大特点为: 1.函数嵌套函数 2.内部函数可以访问外部函数的变量 3.参数和变量不会 ...

  4. 从零开始的全栈工程师——js篇(js的异步)

    js中的异步 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任 ...

  5. 从零开始的全栈工程师——js篇2.21(事件对象 arguments 阻止事件默认行为兼容 事件委托 事件源对象)

    一.事件对象 1.常用的事件2.每个元素身上的事件都是天生存在的 不需要我们去定义 只需要我们给这个事件绑定一个方法 当事件触发的时候就会执行这个方法 3.事件绑定的写法 ①div.onclick=f ...

  6. 从零开始的全栈工程师——js篇2.20(事件对象 冒泡与捕获)

    一.复习 面向对象 1)单例模式 2)工厂模式 3)构造函数 ①类js天生自带的类 基类object function array number math boolean date regexp st ...

  7. 从零开始的全栈工程师——js篇2.16

    js操作css样式 div.style.width=“200px” 在div标签内我们添加了一个style属性 并设定了width值 这种写法会给标签带来了大量的style属性 跟实际项目是不符的 我 ...

  8. 从零开始的全栈工程师——js篇2.14(表单与计时器)

    一.表单 Form input select textarea type=”radio/checkbox/password/button/text/submit/reset/” 表单的事件 oncha ...

  9. 从零开始的全栈工程师——js篇2.12(面向对象)

    面向对象 Js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差. 所以作者就收到java和c的影响,往面向对象靠齐.Js天生有一个Object ...

  10. 从零开始的全栈工程师——js篇2.10(对象与构造函数)

    对象与构造函数 一.js数据类型 基本数据类型:string   undefined   null  boolean  number 引用数据类型  Object  array  function 二 ...

随机推荐

  1. JAVA类,变量的赋值一个小细节,以及static标注变量的意义

    在JAVA类中方法外部定义的变量,如果定义的时候没有赋值,那么在方法外也不能对其进行赋值,否则报错,只能放入某一个方法内对其赋值.(为何报错待晚些时候深入查找补充) static标注的变量称为静态变量 ...

  2. Elasticsearch2.x --DeleteByQuery

    一.安装插件 要删除某个索引的一个type下的所有文档,相当于关系型数据库中的清空表操作.查阅了一些资料可以通过Delete-by-Query插件删除,首先使用插件管理器安装Delete-by-Que ...

  3. SRAtoolkit软件的使用介绍

    Using the SRA Toolkit to convert .sra files into other formats Sequence Read Archive Submissions Sta ...

  4. sklearn有关参数

    from sklearn import datasets from sklearn.linear_model import LinearRegression import matplotlib.pyp ...

  5. .Net Core WebApi返回日期格式的问题

    环境:.net core 2.1 webapi 问题简介: 返回DateTime,前端接收到的字符有时候为2018-01-01T12:01:01,有时候为2018-01-01T01:01:01.722 ...

  6. nessus安装及使用

    1.安装注册 (1)从https://www.tenable.com/products/nessus/select-your-operating-system上下载对应操作系统版本的nessus,结果 ...

  7. 死磕 java同步系列之开篇

    简介 同步系列,这是彤哥想了好久的名字,本来是准备写锁相关的内容,但是java中的CountDownLatch.Semaphore.CyclicBarrier这些类又不属于锁,它们和锁又有很多共同点, ...

  8. Maven核心知识

    什么是Maven? Maven是基于项目对象模型(POM), 可以通过一小段描述信息来管理项目的构建和文档的软件项目管理工具 目录结构如下 src main java package test jav ...

  9. 《OD大数据实战》Mahout入门实例

    一.环境搭建 1. 下载 mahout-0.9-cdh5.3.6.tar.gz 2. 解压 3. mahout org.apache.mahout.clustering.syntheticcontro ...

  10. 洛谷P4121 [WC2005]双面棋盘(线段树套并查集)

    传送门 先膜一下大佬->这里 据说这题正解是LCT,然而感觉还是线段树套并查集的更容易理解 我们对于行与行之间用线段树维护,每一行内用并查集暴力枚举 每一行内用并查集暴力枚举连通块这个应该容易理 ...