威尼斯wns.9778官网 > 计算机教程 > 威尼斯wns.9778官网:名称空间

原标题:威尼斯wns.9778官网:名称空间

浏览次数:199 时间:2019-05-10

JS函数的作用域

一、什么是名称空间

我们写一段代码,里面肯定会定义一些变量名,函数名,而一旦我们运行代码,python解释器在加载这些代码的时候,会在内存中开辟一片空间专门用来存放这些名字以及这些名字所绑定的值的关系,

这块内存就被称为名称空间。

python中的函数和类也有作用域。控制语句没有作用域。

二、名称空间分类

<script>
    if (1){
        var x=2;
    }
     console.log(x);//x是可以找到的,因为控制语句没有作用域
    function f() {
        var y=4;
    }
    f();
    console.log(y)//出现y没有定义的错误,函数是有作用域的。
</script>

//嵌套函数的作用域
<script>
    var name="beijing";
   function f() {
       function fun() {
           var name="guangdong";
           return name;
       }
       fun();
       return fun();
   }
    var b=f();
    console.log(b);//结果为guangdoong
    console.log(name);//结果为beijing
</script>

闭包
<script>
    var name="beijing";
   function f() {
       var name="shanghai";
       function fun() {
           var name="guangdong";
           console.log(name);
       }
       return fun;

   }
    var b=f();
    b();//运行结果为广东

</script>

名称空间分为三种:

△内置名称空间

  内置名称空间是用来存放python解释器的一些内置方法明以及变量名的。这些名称是在解释器启动的时候就加载好的,我们随时可以调用。比如常见的 print( )、input( )、len( )等都是内置方法,我们在写代码的时候直接调用就行。而存放他们的名字的地方就叫做内置名称空间。

△全局名称空间

  我们在写一段代码的时候,除了函数内所定义的变量以及函数外,其他的变量名以及函数名所存放的地方就叫做全局名称空间。一旦我们定义好这个变量或者函数,那么我们可以在代码的任意地方调用。

△局部名称空间

  存放函数内定义的变量名以及函数内嵌套的函数名的地方叫做局部名称空间。他们只能在函数内部(包括函数内嵌套的函数内部)被调用。

威尼斯wns.9778官网 1

三、名称的加载顺序

当我们打开解释器的时候内置变量以及函数就立即被加载,当我们执行一段代码的时候,全局变量以及函数才被加载,但是函数内部并不会被执行,只有在函数被调用的时候才会加载它内部的变量以及内嵌函数,所以,名称的加载顺序是:内置名称---->全局名称---->局部名称

威尼斯wns.9778官网 2

四、名字的查找顺序

与名称的加载顺序刚好相反,python解释器在用到一个变量或者函数的时候,它会优先从局部名称空间去查找,如果没有,再到全部名称空间去查找,如果还没有,才会去内置名称空间去查找。

示例如下:

威尼斯wns.9778官网 3

1 x = 0
2 def input():
3     x = 1
4     print(x)
5 input()

#大家都知道python内置的一个方法叫做input( ),他是用来做用户交互的,但是如果我们自己定义一个input函数,
#那么再调用 input( )这个方法的时候,它会先从全局命名空间找input这个名字,如果找得到,那么它就不会再去
#内置名称空间去调用内置的input()方法了。而这个我们自定义的input方法内部有一个变量x,全局里还有一个变
#量也叫x,这个时候我们在函数内部调用x,那么解释器就会先从局部名称空间去找,很显然,它能找到,那么将不会再
#去全部或者内置名称空间里去找了,所以最后打印的x的值为1

威尼斯wns.9778官网 4

 

<script>
    window.alert("nihao");//alert()方法,只有确定,没有取消,仅仅是提醒
    var b=window.confirm("你是张萍吗?");//confirm()方法,选择确定为true,选择取消为false,可以进行选择
    console.log(b);
    var t=window.prompt("hello----");//prompt()方法是进行文本写入,有确定和取消两种选择,输入信息,然后进行选择
    console.log(t);
    window.open("http://www.baidu.com")


</script>

<script>
    function show_Time() {
       var current_Time=new Date().toLocaleString();//new Data()用来获取当前时间
       var b=document.getElementById("id1");
       b.value=current_Time;
    }
    var clock1;
    function begin() {
        if (clock1==undefined){
              show_Time();
              clock1=setInterval(show_Time,1000)//setInterval()用来做定时器。
            }
    }
    function end() {
        clearInterval(clock1);
        clock1=undefined
    }
</script>

<div onclick="fun()">你是我的小呀小苹果</div>
<script>
    function fun() {
        console.log("你是一次的")
    }
    var c=setTimeout(fun,1000);//1秒后执行函数fun一次。
    clearTimeout(c)

</script>

五、作用域

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

  全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

  局部作用域:局部名称空间,只能在局部范围内生效

威尼斯wns.9778官网 5

六、global关键字和nonlocal关键字

△global

虽然在局部作用域内可以调用全局作用域的变量,但是它是没有权限修改,如果非要修改,那么就要用到global这个关键字了,如下:

威尼斯wns.9778官网 6

1 a = 10
2 def func():
3     global a
4     a = 20
5 
6 print(a)  #调用函数之前a的值为10
7 func()
8 print(a)  #调用函数之后a的值就被修改为20了

威尼斯wns.9778官网 7

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a onclick="f()">onsubmit</a>
<script>
    function f() {
           history.back()
    }

</script>

</body>
</html>
//实现在两个页面中的跳转。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="2.html" onclick="fun()">click>>>></a>
<script>
    function fun() {
        history.go()
    }
</script>

</body>
</html>

△nonlocal

nonlocal关键字是用来改变外部离自己最近的局部变量

威尼斯wns.9778官网 8

七、函数的嵌套

函数里面可以嵌套另外一个函数:

1 def outer(): 
2      def inner():
3          pass

 

<script>
    function f() {
        location.assign("http://www.baidu.com");//页面跳转到百度页面,可以返回到当前页面
        //注意assign()和replace()的区别,replace()没有后退。
        location.reload();//刷新页面
        location.replace("http://www.baidu.com");//当前页面被新的页面覆盖
    }

</script>

八、闭包

满足一下两种情况的函数就成为闭包:

①有函数的嵌套

②内部函数调用外部函数的变量(不是指全局变量)

如下:

1 def outer():
2     a = 1
3     def inner():
4         print(a)

 

威尼斯wns.9778官网 9

 九、闭包的应用

下面的例子是写一个简单的爬网页函数,将指定网页的源代码打印出来:

威尼斯wns.9778官网 10

1 from urllib.request import urlopen
2 
3 def get_url():
4     url = 'http://www.xiaohua100.cn/index.html'
5     def get_html():
6         res = urlopen(url).read()
7         print(res)
8     get_html()
9 get_url()

威尼斯wns.9778官网 11

 

 

 

标签: 函数作用域名称空间闭包

威尼斯wns.9778官网 12

威尼斯wns.9778官网 13

威尼斯wns.9778官网 14

<script>
   var ele=document.getElementsByClassName("p1")[0];
   console.log(ele.nodeName);//在HTML中所有的标签都是节点,节点名字
   console.log(ele.nodeType);//节点类型
   console.log(ele.nodeValue);//节点值
   console.log(ele.innerHTML);//节点中的文本信息

</script>

本文由威尼斯wns.9778官网发布于计算机教程,转载请注明出处:威尼斯wns.9778官网:名称空间

关键词:

上一篇:DevExpress GridView.CustomSummaryCalculate 实现自定义Gro

下一篇:没有了