1. var是声明一个变量;虽然声明了这个变量,但在存入值之前,它的初始值是 undefined;2.全局变量:拥有全局作用域,在js代码中的任何地方都是有定义的;
3.局部变量:在函数内声明的变量只在函数内有定义,作用域是局部的,只在函数内有定义;
4.全局作用域编写代码时可以不写var,但声明局部变量时必须使用var语句;
5.在函数体内,局部变量的优先级高于同名的全局变量。如果局部变量和全局变量同名,那么全局变量会被局部变量所遮盖;但全局变量的值不会改变;
6.作用域链查找规则:自上而下(一个或多个script),由里到外查找(函数中)。

01.

 var foo=1;
function test(){
var foo=2; //var声明,所以是局部变量
alert(foo);
}
test(); //2
alert(foo); //全局变量仍是1

02.

 var foo=1;
function test(){
foo=2; //未声明,所以是全局变量
alert(foo);
}
test(); //2
alert(foo); //全局变量被修改为2

03.

 var foo=1;
function test(){
alert(foo);
var foo=2;//var声明,所以是局部变量
}
test(); //undefined
alert(foo); //全局变量仍为1

03中,foo是局部变量,局部变量优先级大于全局变量,但因为变量在声明但未定义前,是undefined.所以test()是undefined.等价于04.

04.

 var foo=1;
function test(){
var foo;//var声明,所以是局部变量
alert(foo);
foo=2;
}
test(); //undefined
alert(foo); //全局变量仍为1

关于js中变量声明和作用域的理解的更多相关文章

  1. js中变量声明有var和没有var的区别

    转js中var用与不用的区别 2015年07月13日 16:08:22 阅读数:3627 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种 ...

  2. js中变量声明提前

    demo1: var a=10; function b(){alert(a); var a=20; alert(a)} b()//undefined 20 因为:js编译器在执行b这个函数时,会把函数 ...

  3. js函数中变量声明提前

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. js中变量的声明

    大家都知道js中变量的声明是要提前的,下面有4个样例: 1.if(!"t" in window){  var t = 1; }       alert(t);答案是undefine ...

  5. js中要声明变量吗?

    你好,js语言是弱类型语言,无需申明即可直接使用,默认是作为全局变量使用的.建议:在function里时应使用var 申明变量,这样改变量仅仅只在function的生存周期内存在,不会污染到,全局控件 ...

  6. JavaScript中变量声明有var和没var的区别

    JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...

  7. js中的块级作用域

    概述 函数是js中最常见的作用域单元, 声明在一个函数内部的变量或函数会在所处的作用域中隐藏起来, 这是有意为之的非常好的设计原则. 但是随着js的发展, 我们有了某个代码块(通常指{..}内部)隐藏 ...

  8. javascript变量声明及作用域总结

    javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...

  9. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

随机推荐

  1. 如何通过Button获取UITableViewCell

    发现一个奇怪的问题: 手机(ios7) 2015-06-17 15:11:29.323 ***[1412:60b]  [btn superview] =  UITableViewCellContent ...

  2. 去处HTML标签

    JavaScript去处HTML标签 function removeHTMLTag(str) { str = str.replace(/<\/?[^>]*>/g, ''); //去除 ...

  3. 【leetcode❤python】198. House Robber

    class Solution(object):    def rob(self, nums):        """        :type nums: List[in ...

  4. 【leetcode❤python】110. Balanced Binary Tree

    #-*- coding: UTF-8 -*-#平衡二叉树# Definition for a binary tree node.# class TreeNode(object):#     def _ ...

  5. 【转载】UML类图知识整理

    原文:UML类图知识整理 UML类图 UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料. 这里简单整理 类之间的关系 泛化关系(generalization) 泛化(generalize ...

  6. SQL Server小技巧【1】

    1.SQL防止修改数据时引起多用户并发,当一条数据被一个用户锁定的时候其他用户将无法修改,除非将其释放. UPDATE TABLENAME WITH(ROWLOCK) SET 字段='Value' W ...

  7. html5 的draggable属性使用<转载收藏>

    在HTML5中,已经支持在浏览器与其他应用程序之间的数据互相拖动,同时也大大简化了有关于拖放方面的代码. 实现拖放的步骤 在HTML5中要想实现拖放操作,至少要经过两个步骤: 将想要拖放的对象元素的d ...

  8. Oracle Regexp_substr

    Oracle中REGEXP_SUBSTR函数   Oracle中REGEXP_SUBSTR函数的使用说明:   题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','2 ...

  9. Java中List的使用

    package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ListTest { p ...

  10. Android中view动画

    [1]透明 //点击按钮 实现iv 透明的效果 动画 public void click1(View v) { //1.0意味着着完全不透明 0.0意味着完全透明 AlphaAnimation aa ...