函数第一节:

1.函数的概念及作用

     函数是由事件驱动的或者当他被调用时可执行的可重复使用的代码块。
   具备一点功能的代码段,代码段来实现具体的功能。要想实现一个函数的功能需要对函数进行调用。每写完一个函数就需要在使用时进行调用
 

2.函数的好处

   重复使用     忽略细节     选择执行
 

3.函数的定义

   通过关键字function声明,
     function fn(){}
     其中:
        function---为声明函数的关键字,指出这是一个函数
        fn ------是函数的名称,类似于永来存储函数的变量
        () ------为函数的参数,多个参数用 , 隔开
        {} ------放置函数体,用于执行时,所要编译的代码段
 

4.函数的调用

   fn(); ----函数名+()
   
   注意:千万不能丢掉括号;可先尝试理解fn()()()()
 

5.事件的概念种类和作用

   是一种可以被js侦测到的行为
   在JS中常见的事件有:
       鼠标点击--------onclick
       鼠标双击--------ondblclick
       页面或图片加载-----onload
       鼠标移入--------onmouseover
       鼠标离开--------onmouseout
       元素获得焦点------onfocus
       元素失去焦点------onblur
       键盘事件
       ……
 
   主要用于和用户产生一定的交互,提高页面或程序的交互性。
 
   事件和函数之间的关系
       当触发事件的时候,执行函数
 
   事件----调用----函数
   
 

6.参数的声明和传递

   函数的参数分为:形参和实参;
   function fn(a){          //a为形参
console.log(a); //打印出123
}
fn(123); //123为实参
 
   写在函数体内的参数称为形参,相当于该函数的某个变量,只不过不用var声明;需要遵循变量的命名方式。
   调用时传递的参数为实参,相当于给变量赋值,可以传递所有数据
   
 
 

函数第二节:

1.函数的两种创建方式:声明式和赋值式

   通过关键字function声明:
     function fn(){}
   
   通过变量赋值(未命名函数):
     var fn = function(){};
   这种方式下,虽然这个函数没有名字,但是这个函数赋值给了fn,因此通过变量fn也能调用到这个函数
   
   以上两种声明方式等价
 
   都可以使用  函数名/变量名+()  调用执行
 

2.形参和实参

   形参和实参都可以有多个,用逗号隔开,多个形参和实参之间必须相互一一对应
   function fn(a,b,c){            //a = 1, b = 2, c = 3
console.log(a+b+c); //
}
fn(1,2,3);
 
   如果形参和实参不一致:
       形参的数量比实参的数量多,多出来的形参,为undefined;
       形参的数量比实参的数量少,多出来的实参,传递到arguments对象中;
       形参的数量与实参的数量相等,一一对应。
 

3.return关键字

   alert(parseInt(123.456));            //弹出123

   function fn(a,b,c){
console.log(a+b+c);
}
alert(fn(1,2,3)); //弹出undefined
   
   因为fn()函数没有返回值,只要没有返回值的函数,都返回一个undefined
   
   可通过关键字return返回函数的值。
 
   return的作用:1.返回值;2.终止程序
   
   function fn(a,b,c){
console.log(a+b+c);
return a+b+c;
}
alert(fn(1,2,3)); //弹出6
 
   什么是返回值?
       将函数处理后的数据,返回到执行语句上,便于其他程序或用户调用或做二次使用
 
       如果有return,此时fn(1,2,3)==return的返回值
       如果没有return,此时fn(1,2,3)==undefined
 
   return中止程序之后,return下面的代码不会执行
 
   不一定所有函数都要有返回值,只有需要返回数据的函数才加return
 
   return可以返回任何值,包含函数,当返回函数时,如果需要执行返回的函数,可将返回值当成一个函数名,加上一个()即可执行;
   如fn(2)(3)(4);
 

4.arguments对象

   如果形参和实参不一致:
       形参的数量比实参的数量多,多出来的形参,为undefined;
       形参的数量比实参的数量少,多出来的实参,传递到arguments对象中;
       形参的数量与实参的数量相等,一一对应。
 
   在函数中,形参和实参的个数,可以为任意个,甚至数量不对应,程序都不会报错,但是在计算过程中可能会出现NaN,如:
   function fn(a,b,c){
return a+b+c;
}
alert(fn(1,2)); //弹出NaN
   这是因为在JS中,参数在函数内部是以一个数组表示的,函数接受的永远是一个数组。
   我们可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每个参数。
   
   在arguments身上有许多属性,如
       arguments.length为数组的长度----当前传进来几个参数
 
 

函数第三节:

1.作用域

    什么是作用域,变量在函数内部作用的范围/区域。有函数的地方就有作用域
 

2.局部作用域和全局作用域

    function fn(){
var a = 1;
}
console.log(a); //报错:a is not defined
    用var声明的变量,实际上是有作用域的
    在函数内部定义的变量,该变量的作用域是整个函数体,在函数体外不可引用该变量,这是局部作用域
 

变量的生命周期:

    1.永远存在----全局
        程序没关,一直占用内存,少用全局
    
    2.朝生暮死----局部
        函数的大括号开头到函数的大括号结尾
 
    var a = 1;
function fn(){
console.log(a); //
}
console.log(a); //
    不在任何函数内定义的变量就具有全局作用域。全局变量在任何地方都能调用。
 
  利用匿名函数生成一个局部作用,把变量的声明和使用这个变量的小函数都放在匿名函数中
 
    扩展:javascript默认有个全局对象window,全局作用域的变量实际上被绑定到window的一个属性
 
 3.声明提升
      变量声明提升:
     console.log(a)     //undefined已经声明但是未赋值
var a = 2;
console.log(a) // consoleo.log(b) //not a defined未声明 function fn(){
console.log(a) //undefined
var a = 1;
}
fn();
    在函数fn()中,在没有定义变量之前打印a,得到undefined,而并不是not defined
    说明此时变量已经被声明,只是还没有被赋值。
 
    上面的fn()函数可以理解成
    function fn(){
var a;
console.log(a);
a = 1;
}
fn(); 
 
    我们称这种现象为变量的声明提升,所有使用var声明的变量会在当前作用域最开始的部分被声明。   
 
    函数的声明提升:整体提升
    fn();        //
function fn(){
console.log(2);
}
fn(); //2
    console.log(fn);     //undefined
fn(); //not a function
var fn = function(){
console.log(1);
 
  JS的编译和执行
      先检查语法错误---语法错误,当前代码段不执行
      声明提升------变量提升和函数提升,作用域内所有使用var声明的变量和非匿名函数
      开始编译------逐行执行
 
    函数声明提升:

   fn();                    //
function fn(){
console.log(123);
}    
    但是:
 
    fn();                    //报错:fn is not a function
var fn = function(){
console.log(123);
}
    以上写法等于:
    var fn;                  //此时声明变量fn,未定型和存值
fn(); //所以此时的fn不是一个函数,不能使用执行函数的方式执行,强行执行会报错
fn = function(){ //此时才对fn赋值函数
console.log(123);
}
fn(); //这时就可以执行了

4.递归函数

    什么是递归?
    就是在函数体内调用本函数。是一种调用模式,是一种逻辑程序基础的体现。
 
    递归会消耗大量内存,在实际开发中很少使用 
    注意:递归最重要的是终止条件。
 
 
 

函数第四节:

1.利用事件触发函数执行?

    主要用于和用户产生一定的交互,提高页面或程序的交互性。
 
    事件和函数之间的关系
       当触发事件的时候,执行函数
 
    事件----调用----函数
 
 
 

2.常见事件触发函数?

    常见事件:
    是一种可以被js侦测到的行为
    在JS中常见的事件有:
       鼠标点击--------onclick
       鼠标双击--------ondblclick
       页面或图片加载-----onload
       鼠标移入--------onmouseover
    鼠标离开--------onmouseout
       元素获得焦点------onfocus
       元素失去焦点------onblur
  
 
 

3.构造函数及对象类型(了解)

    可以构造某件东西的函数
    var str = "123”;             //字面量方式生成
console.log(str); //123
console.log(typeof str); //string var str = new String("123”); //构造函数方式生成
console.log(str); //[1,2,3,…]
console.log(typeof str); //object 
    构造函数只会产生对象,构造函数是用来构造对象的函数
 
    构造函数用来构造对象,对象被用来编程,面向对象向编程
 
    一种新的调用函数的方式:new调用

Javascript基础三(函数)的更多相关文章

  1. Javascript 基础--JS函数(三)

    一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2)   基本语法 function 函数名(参数列表){ //代码; retur ...

  2. JavaScript基础三

    1.10 关于DOM的事件操作 1.10.1 JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数. ...

  3. (Frontend Newbie)JavaScript基础之函数

    函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...

  4. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  5. JavaScript 基础回顾——函数

    在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...

  6. javascript基础(五)函数

    原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...

  7. JavaScript基础之函数与数组

     函数    函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...

  8. Javascript入门(三)函数

    Javascript函数 一.函数定义与执行 <script type="text/javascript"> //define function fun1(){ ale ...

  9. JavaScript基础-即时函数(Immediate Functions)(017)

    1.即时函数的声明方法 即时函数(Immediate Functions)是一种特殊的JavaScript语法,可以使函数在定义后立即执行:(function () {    alert('watch ...

随机推荐

  1. MySQL --12 备份的分类

    目录 物理备份(Xtrabackup) 1.全量备份 2.增量备份及恢复 3.差异备份及恢复 4.实战:企业级增量恢复实战 物理备份(Xtrabackup) Xtrabackup安装 #下载epel源 ...

  2. usb server新产品(旧老板设备)-给自己一个学习硬件的动力

  3. web项目使用fastdsf上传|下载文件

    在上传代码中添加一下代码 suffix=suffix.substring(1); fast.FastDFSFile file = new fast.FastDFSFile(mFile.getBytes ...

  4. CPU缓存

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11520840.html 由于CPU发展的速度远快于内存的发展,CPU的处理速度就比内存的访问速度快得多 ...

  5. threeJS射线拾取机制及案例

    前言 在浏览器中浏览三维图形的时候,有时想要与三维图形之间做一些点击事件和交互操作,其中比较常用的一个解决方案就是使用Raycaster对象来实现(射线拾取). 基础知识 世界坐标系:webGL中,世 ...

  6. 【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee

    题目如下: Your are given an array of integers prices, for which the i-th element is the price of a given ...

  7. 【锁】synchronized的实现(偏向锁、轻量级锁、重量级锁)

    synchronized的三种应用方式 一. 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁. 二. 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁. 三. ...

  8. mybatis源码分析之05一级缓存

    首先需要明白,mybatis的一级缓存就是指SqlSession缓存,Map缓存! 通过前面的源码分析知道mybatis框架默认使用的是DefaultSqlSession,它是由DefaultSqlS ...

  9. Optional常用操作

    1. 常见操作 @Test public void test1() { F f = new F(); // of(非null对象) Optional<F> fOptional = Opti ...

  10. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...