一丝一竹

导航

 
1.函数:内存中封装一项任务步骤清单的代码段,再起一个名字。
1. 声明: function 函数名(参数列表){
函数体;
return 返回值;
}
参数: 函数运行时,接收传入函数的数据的变量
只不过不用var创建,用function
参数列表: 多个参数间用逗号分隔,相当于在函数内部创建的局部变量;
何时: 当一项任务必须某些数据才能正常执行时
为什么: 参数可让函数变得更灵活
返回值: 函数执行的结果
何时: 如果函数的调用者需要获得函数执行结果
如何返回: return 返回值;
其实,return可单独使用: 退出函数
如果没有返回值的函数,其实也返回东西:
默认返回undefined
2. 调用: 让引擎按照函数的步骤清单,执行任务。
var 返回值=函数名(参数值列表)
参数值列表: 传入函数的执行时必须的数据列表
只要函数定义时规定了参数变量,调用时都要传入参数值。且顺序和个数保持一致。
每个参数值之间用逗号分隔
===强调: 函数不调用不执行,只有调用才执行。

2.作用域scope: 一个变量的可用范围
  包括: 2种:
1. 全局作用域: window
全局变量: 直接定义在全局中,不属于任何函数的变量
特点: 可反复使用,随处可用
何时: 如果一个变量需要反复使用,或跨函数随处可用时
2. 函数作用域: function
局部变量: 2种:
1. 函数的参数变量
2. 在函数内var出的变量
特点: 仅在函数内可用,出了函数不能使用
不可重用
何时: 如果一个变量,仅希望在函数内有效时
总结: 优先定义并使用局部变量
尽量少使用全局变量——避免被污染
***变量的使用顺序: 优先使用函数内的局部变量
只要局部声明了,就不用全局的
除非局部没有声明,才去全局找

3.声明提前(hoist):在开始执行程序前,引擎会将var声明的变量和function声明的函数,提前到*当前作用域*顶部集中优先创建。再开始执行程序。——赋值留在原地。
  鄙视: 如果先使用,后声明,一定在考声明提前,就要将所有var和function提前到当前作用域的顶部,先创建,再判断程序的输出
  解决:
  1.变量:
  传统:强烈建议将所有的声明都集中在当前作用域顶部创建
  ES6:let代替var声明变量
   let要求:在let之前,不允许提前使用该变量
  2.函数:
  function 函数名(参数列表){...}====>var 函数名=function(参数列表){...}
***函数本质:
1.函数名其实仅是一个普通的变量;
2.函数其实是保存代码段的引用类型的对象;
3.函数名通过函数对象的地址引用着函数对象;
4.按值传递:两变量间赋值,或向函数中传入参数时,其实只是将原变量中的值复制一个副本给对方。
结果:原始类型的值: 修改新变量,不影响原变量的值
posted on 2018-01-11 12:38  一丝一竹  阅读(285)  评论(0编辑  收藏  举报