函数的基本操作
js 中的函数
函数是指一段在一起的 / 可以做某一件事的程序, 也叫子程序 (OOP 的) 方法
函数是实现某一功能的方法
创建函数
function [函数名](){
- // 函数体
- // 实现功能的具体的 js 代码
- }
执行函数
函数名() // 把创建的函数执行
函数名() // 这个函数可以执行很多次
- ...
- // 每一次执行都相当于把函数体中实现功能的 js 代码重新执行了一遍
- // 创建函数
- function sun(){
- console.log(1+1)
- }
- // 执行函数
- sum() // -> 2
- sum() // -> 2
- sum() // -> 2
在真实项目中, 我们一般会把实现一个具体功能的代码封装在函数中:
如果当前这个功能需要在页面中执行多次, 不封装成为函数, 每一次想实现这个功能, 都需要重新把代码写一遍, 浪费时间; 而封装在一个函数中, 以后想实现多次这个功能, 我们就没有必要重新写代码了, 只要把函数重新执行即可, 提高了开发效率;
封装在一个函数中, 页面中就基本上很难出现重复一样代码了, 减少了页面中代码的冗余度
, 提高了代码的重复利用率低耦合 高内聚
我们把以上的特点统称为 函数封装(OOP 面向对象编程思想, 需要我们掌握的就是类的继承, 封装, 多态)
函数的核心操作
函数的核心原理
函数作为 js 中引用类型中的一种, 也是按照引用地址来操作的
创建函数
首先会在当前作用域中声明一个函数名(声明的函数名和使用 var 声明的变量名是一样的操作, var sum;function sum(); 这两个名字重复了)
浏览器首先会开辟一个新的内存空间(分配一个十六进制地址), 把函数体中写好的代码当做普通字符串存储在一个内存空间中(创建一个函数如果不执行, 函数没有意义)
把内存空间的地址赋值给之前声明的那个函数名
函数执行
目的: 把之前存储的实现具体功能的 js 代码执行
- "形参赋值"(跳过)
- "私有作用域的变量提声"(跳过)
函数执行, 浏览器首先会为其开辟一个新的私有作用域(只能执行函数中之前编写的 js 代码)
把之前创建时候存储的那些 js 代码字符串拿到私有作用域中, 然后把它们变成 js 代码表达式从上到下执行
"私有作用域是否销毁的问题"(跳过)
闭包
函数执行会形成一个私有的作用域, 让里面的私有变量和外界互不影响(相互不干扰, 无眠的无法获取里面的变量值), 此时可以理解为私有作用域把私有变量保护起来, 把这种保护机制称之为闭包
栈内存
作用域(全局作用域 / 私有作用域): 提供一个供 js 代码执行的环境
堆内存
所有的引用类型, 它们需要存储的内容都在堆内存中(相当于一个仓库, 目的是存储信息)
对象会把键值对存储进来
函数会把代码当做字符串存储进来
来源: http://www.jianshu.com/p/e192bb0fb6ff