js中的方法名一般都是首字母小写,其余单词首字母大写的规范。

  声明

  function 函数名(参数列表) {
      // 函数体
      return 返回值;
  } 

  调用

    函数名(); 

(js中花括号喜欢用这种方式,因为在以前的浏览器中会在每行js代码的末尾添加分号,但现在的浏览器一般已经兼容这种写法,但仍保留这种习惯。)

  需要注意的是只有在js的函数中声明的对象才具有块级作用域。函数中变量一定要定义,否则就是全局变量。

  在解释js的时候,会先将其读入内存进行解释,再一步一步的从上到下的执行代码。js的函数也是变量值,即可以把函数赋值给变量。

   function func1 () {
   // 代码体
   }
   var myFunc;
   myFunc = func1;
   //直接使用myFunc代替func1
   //或者
   var func = function() {
   // 这是一个Lambda函数,也称为匿名函数
   };
   func();

  如果函数中声明的变量名或函数名和对应全局的变量名或函数名一致,则会覆盖全局对象。

调试
  js只能在浏览器中进行调试,如使在FireFox浏览器中安装firebug插件进行调试,而chorme可直接右键选项进行调试。

变量名提升和函数名提升

  函数中的成员具有局部作用域,会出现变量名提升和函数名提升的问题。

如  var func = function(){

    alert(i);

   }

   func();

  程序执行时,先进入func()函数的函数体中,然后执行alert(i),此时会先在函数体内寻找变量i,因为找不到,所以跳到上一级作用域链中,由于函数定义代码之前还是没有变量i的定义,所以程序报错(i is undefined)。

但是如下情况 

  var func = function(){
    alert(i);
    var i = 456;
    alert(i);
  };
  func();

程序不会报错,会先弹出undefined,再弹出456。

上面程序相当于

  var func = function(){

    var i;
    alert(i);
    var i = 456;
    alert(i);
  };
  func();

 所以不会报错。这就是变量名提升,函数名提升同理。 

构造函数

  在js中没有类的概念,但是有函数,函数可以作为构造函数来使用

使用方法
  声明一个函数(构造函数) new 的方式创建对象,模拟类的样子进行创建

   function Person(n, a, s) {
   // 如果需要为对象添加属性(字段)
   // 使用 this.属性名 = 值
   this.name = n;
   this.age = a;
   this.sex = s;
   this.say = function() {
         alert("我是" + this.name);
        };
   }
   // 当类来用
   // 创建对象使用new 关键字
   var p = new Person("杨洪波", 29, "女");
   p.say();
   alert(p.name);
   alert(p.sex);
   alert(p.age);

给对象动态的添加成员
  var o = {};
  o.say = function() {
    alert("你好, 我是" + this.name);
  };
  o.say();
如果对象不具备这个属性,那么用对象去访问就会得到undefined。可以用来验证浏览器是否具备某个方法,写类库的时候,用来判断前面是否已经定义过这个方法,保证方法的可用。

删除对象成员
  使用delete运算符
语法: boolean delete 属性或变量或数组成员;

 如  delete o.say;

可以删除没有使用var声明的变量(所以变量的声明一定要加var关键字)

JS学习笔记(三)函数的更多相关文章

  1. JS学习笔记 (五) 函数进阶

    1.函数基础 1.1 函数的基本概念 函数是一段JavaScript代码,只被定义一次,但是可以被调用或者执行许多次.函数是一种对象,可以设置属性,或调用方法. 函数中的参数分为实参和形参.其中,形参 ...

  2. JS学习笔记 (三) 对象进阶

    1.JS对象 1.1 JS对象特征 1.JS对象是基本数据数据类型之一,是一种复合值,可以看成若干属性的集合. 属性是名值对的形式(key:value) 属性名是字符串,因此可以把对象看成是字符串到值 ...

  3. JS学习笔记3_函数表达式

    1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加 ...

  4. js学习笔记19----getElementsByClassName函数封装

    js里面的getElementsByClassName()方法可通过某个class名获取到元素,在标准浏览器下可使用,在非标准浏览器下不可用.为了能够让这个方法兼容所有的浏览器,可以封装成如下函数: ...

  5. Node.js学习笔记(三) --- package.json 及cnpm

    一.包 Nodejs   中除了它自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理. 完全符合 ...

  6. python学习笔记三 函数(基础篇)

    函数 内置函数 常用的内建函数: type()  列出指定对象的类型 help()  能够提供详细的帮助信息 dir()    将对象的所有特性列出 vars()  列出当前模块的所有变量 file, ...

  7. 10-Node.js学习笔记-异步函数

    异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...

  8. Typescript 学习笔记三:函数

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

  10. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

随机推荐

  1. 公司需求知识自学- Hashtable简单应用

    定义表 Hashtable tblNames = new Hashtable(); 添加key,value键值对 tblNames.Add("A","a"); ...

  2. 分布式-在win7上安装linux操作系统

    由于大多数的分布式计算框架.分布式存储系统.分布式平台都支持在unix类似的环境下.所以要做分布式的实验和学习的话,还是推荐装个linux系统.我这里安装的是ubuntu,由于之前装过这个. 一.下载 ...

  3. 机顶盒加密系统流程 ECM EMM CW SK

    随着数字视频广播(DVB)的发展.观众将面对数字电视节目的选择多.广播业因为投资成本增加,这是需要收取费用的用户观看. 有条件接收系统(Conditional Access System).它的主要功 ...

  4. lucene+盘古分词

    一般的网站都会有都会有搜索的功能,一般实现搜索主要有三种方案 第一种是最差的,也是最不推荐的,使用数据库的模糊查询例如select * form table where 字段 like XXX,这种查 ...

  5. [转]不用Cookie的“Cookie”技术

    有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript.很多网站已经在用了,但知道的人不多.本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪. 这种技术不依赖于: C ...

  6. C# Log4Net使用指南(转)

    1           简介 1.1          Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管 ...

  7. Lua的元方法__newindex元方法

    上一篇介绍了__index元方法,总结来说:__index元方法是用于处理访问table中不存在的字段时的情况. 而今天,介绍的__newindex元方法,总结来说,就是:用于处理给table中不存在 ...

  8. C++学习笔录2

    1.如果一个类要成为基类,那么它的成员变量声明成受保护的变量,既用关键字protected修饰. 2.处理共同继承产生的二义性:采用虚继承方式,当出现两个相同的成员时,编译器会自动删除其中一个.其方法 ...

  9. [springMVC]javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean

    问题描述: 页面使用标签<form:form>进行提交时,出现[springMVC]javax.servlet.jsp.JspTagException: Neither BindingRe ...

  10. gcc 编译器

    gcc -E test.c  预处理 gcc -v test.c  查看编译的整个过程 objdump -d a.out 查看elf文件