JavaScript中函数

函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量)

  1.函数的声明 => function myFn(){};

  2.函数的表达式 => var myFn = function() {};

  3.函数对象方式 => var myFn = new Function(‘n1‘,‘n2‘,‘return n1 + n2 ‘);  // tip: 参数必须加引号

以上:3和其他的两项用法差别较大,不作比较;主要介绍1与2的区别:

  先看二个简单的例子:

var myFn = function () {
    console.log(‘mm‘);
};

myFn(); //mm

var myFn = function () {
    console.log(‘nn‘);
};

myFn(); //nn

在看下这个:

function myFn() {
    console.log(‘mm‘);
};
myFn(); //nn

function myFn() {
    console.log(‘nn‘);
};
myFn(); //nn

  为什么会出现以上两种情况呢? 我们知道JavaScript的代码是一行一行执行的,但是在代码执行之前,浏览器会有一个预解析的过程,会把声明的变量,函数的表达式提升,然后再一行一行的执行代码;但是为什么两个打印的结果不一样呢? 因为第一个是变量的提升,函数本身并没有提升,而第二个函数表达式会整个提升,所以myFn()写在哪,结果都是一样的;

  我们这个时候可能回想,如果他们在一起的时候,哪个先执行?

  第一种情况:

var myFn = function () {
    console.log(‘nn‘);
}
myFn();  // nn

function myFn() {
    console.log(‘mm‘);
}
myFn(); // nn

  第二种情况:

function myFn() {
    console.log(‘mm‘);
}
myFn(); // mm

var myFn = function () {
    console.log(‘nn‘);
}
myFn(); // nn

  这里注意的一点是,变量的提升高于函数表达式;在第一种情况下,var  = myFn 会提升最高的优先级,其次是函数的声明。

  在第一种情况里,函数的声明会提升,然后会被函数表达式覆盖,所以会打印两次一样的;第二次该提升的会提升,代码会一步一的执行;

看一下,下面的一段的代码执行情况,检验一下:

myFn();
function myFn() {
    console.log(‘mm‘);
}
myFn();
var myFn = function () {
    console.log(‘nn‘);
}

这里可以很明显的看到结果 =>打印两次  // mm

下面我们在介绍一种,在函数内部的变量提升(先看一段代码)

function myFn(a) {
    var a = 2;
    console.log(b);
    console.log(a);
    var b = 0 ;
}
myFn(1);  // undefined 2

在函数的内部,如果函数有参数的话,就相当于在函数内部声明了这个变量,如上面例子:先声明 var a;调用的时候传来参数,则 a =1 ,若果在函数内部把a在赋值,那么a就等于新赋值的值;而b是不是参数,但在函数内部定义了,由于变量的提升,会打印underfind,这是变量定义,但是没有赋值,只有在函数赋值后,才能打印该值;

  

时间: 2024-10-12 14:51:56

JavaScript中函数的相关文章

javascript中函数作用域之”提升“

javascript中函数作用域之变量提升 当我们在函数内部用关键字var声明一个变量的时候,此变量的作用域限制在当前函数. 提升:在一个作用域内部,不管一个变量用var声明的位置在哪里,这个变量属于当前整个作用域,并且在当前作用域的任何位置都可以访问它.在javascript中,这种行为/现象称之为"提升",即一个变量在一个作用域的任何位置用var声明,javascript引擎都会把这些用var声明的变量"移动"到当前作用域的开始处. 谈到javascript这种

Javascript中函数的四种调用方式

一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属性:arguments和this. arguments主要是用来保存函数参数,arguments中的callee属性主要是用来指向拥有当前arguments的函数(理解Javascript参数中的arguments对象). 3.在ECMAScript5中规范了另一个函数属性:caller(Opera

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

javascript中函数的不同解析

<html> <head> <title>javascript的函数的生命周期</title> <meta charset="utf-8"/> <script type="text/javascript"> /* javascript是所有语言中对函数生命周期处理最为复杂的语言之一 而javascript的函数的生命周期取决于js解释器是如何解释我们编写 的js代码,我们以例子来说明javasc

JavaScript中函数函数的定义与变量的声明&lt;基础知识一&gt;

1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new function("a","b","return a*b"); createFun(10,3); 2.JavaScript中变量的三种声明方式 a.var foo=value; b.window.foo=value; c.foo=value; //隐

JavaScript中函数的形参和实参的实现原理剖析

我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) { this.x = a; console.log(a); } one(1); </script> 我们传递的数字只有一个1,但是形参那里有abc三个.这分明对不上啊不是吗? 这个时候如果我们查看b,c的话会显示undefined.ps:比如console.log(b). 当然啦,本来就没有这两

私人定制javascript中函数小知识点

函数的定义 首先在javascript中,函数就是对象,程序可以随意操控它们.比如,可以给它们设置属性,甚至调用它们的方法.函数使用function关键字来定义.它既可以用在函数定义表达式,也可以用在函数声明语句中.函数声明function后面必须要更上函数名称也就是所谓的函数名称标识符.如果是函数表达式函数名称标识符可有可无.这段重点是函数是对象,所以函数表现出来的种种行为你想想成对象,那么很多疑惑可能就恍如昨日初见. 函数调用 4种方式来调用javascript函数: 1.作为函数 就是函数

JavaScript中函数的调用

JavaScript中函数的调用 制作人:全心全意 在JavaScript中,函数定义后并不会自动执行,要执行一个函数需要在特定的位置调用该函数,调用函数需要创建调用语句,调用语句包含函数名称和参数. 函数的简单调用 函数的定义语句通常被放在HTML文件的<HEAD>段中,而函数的调用语句通常被放在<BODY>段中,如果在函数定义之前调用函数,执行将会出错. 函数的简单调用基本语法格式如下: <html> <head> <meta charset=&q

javascript中函数浅析

在脚本语言JavaScript中,函数的定义是由事件驱动或者当它被调用时可重复使用的代码块.在JavaScript的标准ECMAscript中,把函数表述为可以随时随地运行的语句.我个人是不认同ECMA的说法的,因为函数只有在发生调用的时候才会执行,否则就是一段毫无生气的代码.我们来具体认识认识函数. (一)首先是函数的定义: 在ECMAscript函数的定义是 关键字function 函数名( 参数){主体:return(返回值)};这四部分组成的,但是在脚本语言中函数的定义却分为三种方式定义

javascript中函数声明和函数表达式的区别

1.js中函数表达式的定义 表达式(expression)JavaScript中的一个短语,javascript会将其计算(evaluate)出一个结果.程序中的常量是一个最简单的表达式.变量名也是一种简单的表达式,它的值就是赋值给变量的值.复杂表达式是由简单表达式组成. --摘自<javascript权威指南> 一个经典的函数表达式的定义方法: //函数表达式的声明,表达式的值就是这个新定义的函数 var expressFunc = function(){}; 函数名称是函数声明语句必须得部