javascript 变量的作用域:


  这是一个至关重要的问题。特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域。也就是说变量是在某个函数中定义的,那么她在函数以外的地方是不可见的。而如果函数是定义在if或for这样的代买块中,那么她随处可见。

  全局变量:是定义在所有函数只外的变量。相反局部变量则是定义在某个函数中。其中,函数内的代码可以像访问自己的局部变量一样访问全局变量,反之则不可以。

;
function her(){
    ;
    num++;
    return num;
}

her();
her();
count // count is not defined

这里还有一点非常重要,如果我们声明变量时没有使用var语句,该变量就会默认为全局变量:

function her(){
    num = ;
}
num; // undefined
her();
num; 

看看发生了什么:在函数被调用之前num是不存在的,该变量num在函数首次被调用的时候创建,并被赋予全局作用域,这会使得我们在函数之外的任何地方去访问它。

注:最好总是使用var语句来声明变量。

  可以考虑使用单一'var模式'例:

, c=true, d;

这样一来,我们可以在很大程度上减少污染全局变量。\(^o^)/YES!

函数也是数据:


  在javascript中,函数其实也是一种数据。也就是说我们可以把函数赋给一个变量。

var her = function(){
    return 'Hello'
}

这种定义方式通常被叫做‘函数标识记法’。

上面是一个函数表达式。函数表达式可以被命名,称为命名函数表达式:

var f = function her(){
    return 'Hello'
}

这种方式也是合法的,但我们常常不会用到。(在这里her是函数的名字,而不是变量。IE会错误的创建f, her两个变量)。

这样看起来,命名函数表达式和函数声明并没有神马区别。但她们其实是不同的。两者的差别表现于她们所在的上下文。函数声明只会出现在程序代码里(在一个函数的函数体内,或在程序主体中)。

// 函数声明
function her1(){
    ';
}

// 命名函数表达式
{
   ';
}

alert(typeof her1) // function
alert(typeof her2) // function

所以,javascript中的函数也是一种数据类型,只不过她有两种特性:

1. 她们所包含的是代码。

2. 她们是可执行的(可调用的)。

如何向变量那样使用函数?

var her = function(a, b){
    return a + b;
}
var beauty = her;
alert(typeof beauty); // function
beauty(, ); 

所以函数的命名规则与变量的命名规则是一样的。<( ̄︶ ̄)>~~~~~~

匿名函数:


我们可以这样定义一个函数:

var f = function her(a){
    return a;
}

通过这种方式定义的函数常被称为匿名函数(即没有名字的函数),特别是当她不被赋值给变量单独使用的时候。在这种情况下,她有两种优雅的用法:

1. 您可以将匿名函数作为参数传递给其它函数,这样,接受方函数就能利用我们所传递的函数来完成某件事情。

2. 您可以定义某个匿名函数来执行某些一次性任务。

下一回我们详细探讨一下匿名函数的用法 <( ̄︶ ̄)>~~~~~~

javascript 函数初探 (三)--- javascript 变量的作用域的更多相关文章

  1. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  2. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

  3. JavaScript 一、 ES6 声明变量,作用域理解

    // JavaScript/* * ========================================================= * * 编译原理 * 尽管通常将 JavaScr ...

  4. javascript 函数初探 (四)--- 回调函数

    回调函数 既然函数与任何被赋值给变量的数据是相同的,那么她当然可以像其他数据那样被定义.删除.拷贝,以及当成参数传递给其它函数. 我们定义一个函数,这个函数有两个函数类型的参数,然后他会分别执行这两个 ...

  5. 【javascript基础】3、变量和作用域

    前言 这篇和大家说一下javascript中的变量和作用域,由于是将基础嘛,主要给大家捋一下知识,不想翻开书复习的道友可以看一下,打算刚开始学习javascript的同学可以扫一眼. PS:jQuer ...

  6. JavaScript(第十一天)【变量,作用域,内存】

    JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据 ...

  7. JavaScript(五):变量的作用域

    一.变量的分类 在JavaScript中变量分为两种: 全局变量 局部变量 二.变量的作用域 1.局部变量的作用域 局部变量:在函数内部定义的变量称为局部变量,其作用域为该函数内部,在该函数外部不能被 ...

  8. javascript 函数初探 (一)--- 神马是函数

    神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...

  9. javascript 函数初探 (五)--- 几种类型的函数

    即时函数: 目前我们已经讨论了匿名函数在回调时的应用.接下来,我们来看看匿名函数的另一种应用实例 --- javascript即时函数: 比如: ( function(){ alert('her'); ...

随机推荐

  1. HTTP认证之基本认证——Basic(二)

    导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ...

  2. JAVA-基础(四) Aarryas 数组

    1. asList( )方法 返回一个被指定数组支持的List.换句话说,列表和数组访问的是同一个 单元.它具有如下的形式: static List asList(Object[ ] array) 2 ...

  3. 20,序列化模块 json,pickle,shelve

    序列化模块 什么叫序列化? 将原本的字典,列表等内容转换成一个字符串的过程叫做序列化. 序列化的目的? 数据结构 通过序列化 转成 str. str 通过反序列化 转化成数据结构. json: jso ...

  4. [转] 查看 SELinux状态及关闭SELinux

    本文转载自: http://bguncle.blog.51cto.com/3184079/957315 查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SE ...

  5. Python学习-day6 面向对象概念

    开始学习面向对象,可以说之前的学习和编程思路都是面向过程的,从上到下,一步一步走完. 如果说一个简单的需求,用面向过程实现起来相对容易,但是如果在日常生产,面向对象就可以发挥出他的优势了. 程序的可扩 ...

  6. 一个TensorFlow例子

    一个TensorFlow的例子 import tensorflow as tf x = tf.constant(1.0, name='input') w = tf.Variable(0.8, name ...

  7. [uiautomator篇][1] 官网译文

    http://www.jianshu.com/p/7718860ec657 2016.07.25 20:59 字数 3675 Android UIAutomator浅谈 --------------- ...

  8. ACM程序设计选修课——1051: Glamor Sequence(YY+求和公式)

    1051: Glamor Sequence Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 16  Solved: 5 [Submit][Status] ...

  9. BZOJ2653 middle 【二分 + 主席树】

    题目 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个 长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c ...

  10. 刷题总结——做运动(NOIP模拟)

    题目: 给定一个无向图,节点数n<=50000,m<=1000000,每条边有两个值t和c,边的长度为t*c···现在要求再t尽量小的情况下,求两节点st的最短距离 题解: 第一次做的时候 ...