精华内容
下载资源
问答
  • 1,外部全局变量 概念:可以被其他文件访问的全局变量称之为全局变量。默认情况下,所有的全局变量都是外部全局变量。...概念:只能被当前文件访问的全局变量,我们称之为内部全局变量 。 使用sta

    1,外部全局变量

    概念:可以被其他文件访问的全局变量称之为全局变量。默认情况下,所有的全局变量都是外部全局变量。

    可以使用 extern显性声明一个外部全局变量

    特点: 可以定义同名的多个外部全局变量;多个同名的外部全局变量指向同一块存储空间

    eg:

    extern int num;


    2,内部全局变量

    概念:只能被当前文件访问的全局变量,我们称之为内部全局变量 。

    使用static关键字定义内部全局变量。

    特点:

    也可以定义多个同名的内部全局变量;如果多个同名的全局变量不在同一个文件中,那么它们将指向不同的存储空间。

    eg:

    static int num;


    3,声明和定义的区别

    声明:不会立即开辟存储空间,只能等赋值后,才开辟存储空间。

    定义:会立即开辟存储空间

    展开全文
  • #pragma mark 内部全局变量和外部全局变量 ###pragma mark 概念 /** 默认情况下所有的全局变量都是 外部全局变量 只要给全局变量加上 static 关键字 就是内部全局变量 外:多个同名的外部全局变量 指向 同一块...

    #pragma mark 内部全局变量和外部全局变量 ###pragma mark 概念

    /**
     默认情况下所有的全局变量都是 外部全局变量
    只要给全局变量加上 static 关键字 就是内部全局变量
     
     外:多个同名的外部全局变量 指向 同一块存储空间
     内:多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间
    
     只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
     
     extern:
     用于声明一个外部全局变量
     声明只需要在使用变量之前声明就可以了
     static:
     用于定义一个内部全局变量
     声明和定义的区别:
     声明不会开辟存储空间
     定义会开辟存储空间
     
     */
    

    ###pragma mark 代码 ####mian.c

    #include <stdio.h>
    #include "lyh.h"
    /*
     全局变量分为两种:
     1.外部全局变量,默认情况下所有的全局变量都是外部全局变量
        什么是外部全局变量? 可以被其他文件访问的全局变量 我们称之为 外部全局变量
     
     2. 内部全局变量, 只要给全局变量加上 static 关键字 就是内部全局变量
        什么是内部全局变量? 只能被当前文件访问的全局变量 我们称之为 内部全局变量
     
     外部全局变量 有一个特点:
        可以定义同名的外部全局变量
        多个同名的外部全局变量 指向 同一块存储空间
     
     内部全局变量 又一个特点:
        也可以定义多个同名的内部全局变量
        多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间
     
     为了提高数据的安全性, 不让别人在其他文件中修改我们的全局变量,C语言提供了另外一个用于修改全局变量的关键字,static
     // 只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
     这样就可以提高我们全局变量的安全性
     
     如果多个文件中存在同名的 内部全局变量,相互不影响
     如果既有外部全局变量 也有内部全局变量, 那么会优先访问内部全局变量
     
     extern:
        用于声明一个外部全局变量
        声明只需要在使用变量之前声明就可以了
     static:
        用于定义一个内部全局变量
     声明和定义的区别:
        声明不会开辟存储空间
        定义会开辟存储空间
     */
    
    // 编译 出现 main.o
    // 说我在 mian.c 里面定义了一个num
    
    // int num; // 外部全局变量
    
    static int num; // 内部全局变量
    int main()
    {
        /*
         Undefined symbols for architecture x86_64:
         "_test", referenced from:
         _main in main.o
         ld: symbol(s) not found for architecture x86_64
         clang: error: linker command failed with exit code 1 (use -v to see invocation)
         
        找不到text函数
         
         */
        num = 998; 
        test();
        printf("main.c num = %i\n",num);
    
        return 0;
    }
    
    
    

    ####lyh.c

    #include "lyh.h"
    // duplicate symbol _num in: 说我重复定义了一个num
    
    /*
    // 编译 出现 lyh.o
    // 说我在1 mian.c 里面定义了一个num
    //int num;   // 由于Xcode6升级之后导致的,在Xcode6以前是可以的
     如果在lyh.c当中 定义外部全局变量 num, 那么我们说过 同名的外部全局变量 指向同一块存储空间,那么如果在多个文件中有同名的外部全局变量,可能导致a文件的数据被B文件不小心修改
     降低了数据的封装性,提高了错误的风险
    */
    // extern 关键字 用于修饰全局变量, 代表声明一个全局变量
    // 注意:声明全局变量 和 声明函数 一样 , 仅仅是告诉系统我们有这个全局变量, 但并不会真正的开辟存储空间
    //extern int num;    // 如果使用命令行输出 不会有问题 cc-c mian.c  cc - lyh.c 生成 .o文件 然后  cc mian.o lyh.o 生成a.out
    /**
     Undefined symbols for architecture x86_64:
     "_num", referenced from:
     _test in lyh.o
     
     extern 是声明一个变量, 而不是开辟一块存储空间
     */
    //int num;
    void test()
    {
    extern int num;
        printf("lyh.c num = %i\n",num);
        num = 666;
    }
    int num;
    

    转载于:https://my.oschina.net/u/3561184/blog/1204119

    展开全文
  • jQuery的内部全局变量和构造函数

    千次阅读 2017-05-13 12:03:43
    jQuery外层包装函数 打开任意一个jQuery的源码js文件,都会看到一个匿名自执行函数,如下代码所...window是一个全局对象,为什么要把window作为参数传递到框架内部? 调用函数栈时,收索变量顺序是从内到外的方式进行

    jQuery外层包装函数

    打开任意一个jQuery的源码js文件,都会看到一个匿名自执行函数,如下代码所示。

    //()();自执行函数,定义后立马调用
    (function(window, undefined) {
        //... ... 
    })(window);

    window是一个全局对象,为什么要把window作为参数传递到框架内部?

    • 调用函数栈时,收索变量顺序是从内到外的方式进行。window作为全局对象而言,肯定是最后才收搜到,那么放到内部可以提高速度;
    • js是具有压缩版本compress,那么在jQuery内部使用window时,压缩后会变成单个字符,如e,那么所有使用window的地方都将访问不都window内的属性,从而造成语法错误,而将window作为参数传递,即使jQuery内window被压缩为字符e,但e任然指向window。

    undefined为什么要作为参数?

    • undefined是window下的一个属性,其实在早期的浏览器版本中可以对其进行修改,如IE10以下。 如果外部js环境修改了window.undefined值,那么在函数体内部的undefined判断则不成立。

    注释use strict

    jQuery为什么注释strict模式? 原因:

    1. strict模式好处
      • 在代码中不能使用一些扩展的保留关键字implements、interface、let、package、private、public、static和yield等;
      • with语句不能使用;
      • 不能申明或重写eval和arguments两个标识符;
      • 不能用delete删除显示申明的标识符、名称或函数;
      • 不能申明8进制;
      • 如果语法检测时发现语法问题,则整个代码块失效,并导致语法异常,如检测对象中的重复键、未申明变量、重复的函数参数;
      • 如果在运行期间出现了违反严格模式的代码,则抛出执行异常。
    2. strict模式限制
      • 必须在全局代码或eval代码或函数申明代码或new Function传入的body开始出引入;
      • 限制8进制在IE10以下不支持和FireFox 18以下不支持。

    从strict中可以看到好处就是规范js代码的书写规范和语法检查等功能,那么程序员自身能书写规范化的代码前提下使用strict则显得有些画蛇添足。同时有些浏览器本身也不支持strict模式。

    jQuery全局变量

    在jQuery源码js中的21~94行是var定义的jQuery内的局部全局变量,这里的局部是指jQuery外层包装函数的变量,而全局是jQuery对象而言。包括如下变量:rootjQuery、readyList、core_strundefined、location、document、docElem、_jQuery、_$、class2type、core_deletedIds、core_version、core_concat、core_push、core_slice、core_indexOf、core_toString、core_hasOwn、core_trim和jQuery、core_pnum、core_rnotwhite、rquickExpr、rsingleTag、rmsPrefix、rdashAlpha、completed等26项。26个变量都起到什么作用是开始阅读源码的起始问题,下面我们根据源码中提供的注释进行翻译。

    • rootjQuery 根节点对象
      “A central reference to the root jQuery(document)”意思是jQuery(document)返回的根节点对象的reference引用,也即在870行有个赋值语句,如下。
    // 870All jQuery objects should point back to these
    rootjQuery = jQuery(document);
    • readyList 用于DOM加载的延迟对象
    //826行
     readyList = jQuery.Deferred();
    • core_strundefined 表示undefined的字符形式 ——'undefined'
    // Support: IE9 表示IE6/7/8都不支持在xml文档节点中通过
    //xmlNode.method !== undefined方式来检查method是否为undefined
    // For `typeof xmlNode.method` instead of`xmlNode.method !== undefined`
    core_strundefined = typeof undefined
    • window参数对应的属性简写
    location = window.location, //URL地址对象
    document = window.document, //文档对象
    docElem = document.documentElement, //文档HTML元素对象
    • _jQuery、_$保存外部jQuery、$
    //356行中的noConflict中,解决外部定义$、jQuery对组件内部的影响。
    noConflict: function( deep ) {
        if ( window.$ === jQuery ) {
             window.$ = _$;
        }
    
        if ( deep && window.jQuery === jQuery ) {
              window.jQuery = _jQuery;
        }
    
        return jQuery;
    },
    • class2type 一个object的对象字面量,用于存储类型简写键值对。
    //847行,将常用类型进行组装成toString类型的键值对缓存
    // Populate the class2type map
    jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
            class2type[ "[object " + name + "]" ] = name.toLowerCase();
    });
    • jQuery版本和通用方法简写
    //缓存被删除的
    core_deletedIds = [],
    core_version = "2.0.3", //jQuery版本
    //通过存储对象方法的引用来提高函数查找速度
    core_concat = core_deletedIds.concat,
    core_push = core_deletedIds.push,
    core_slice = core_deletedIds.slice,
    core_indexOf = core_deletedIds.indexOf,
    core_toString = class2type.toString,
    core_hasOwn = class2type.hasOwnProperty,
    core_trim = core_version.trim,
    • 正则表达式,用于基本的工具表达式
    //用于检测数字表达式,如12,12.9,12e10,12.3e3
    core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
    //用于检测非空白字符,这里\S其实已经一目了然
    core_rnotwhite = /\S+/g,
    //一种检测选择器是否HTML字符串的正则表达式,关键在于下面的两句话:Prioritize #id over <tag> to avoid XSS via location.hash (#9521);Strict HTML recognition (#11290: must start with <)
    //两个子表达式/^(?:\s*(<[\w\W]+>)[^>]*$/和/^#([\w-]*))$/分别是检测HTML字符串、#id选择器
    rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
    //匹配单标签HTML元素,如<input/><div></div>
    rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    //ms表示micro soft,大家应该明白这是啥意思
    rmsPrefix = /^-ms-/,
    //匹配虚线后的单字符,数据0-9和小写字母a-z
    rdashAlpha = /-([\da-z])/gi,
    • camel字符转换函数fcamelCase
    //将虚线转换为camel方式的字符,如"a-d""a-D",而
    fcamelCase = function( all, letter ) {
        return letter.toUpperCase();
    },
    //556行,将字符串转换为camel形式的字符串
    camelCase: function( string ) {
        return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    },
    • ready事件处理器complete
    completed = function() {
         //首次清除load加载事件,然后在手动调用jQuery.ready函数
        document.removeEventListener( "DOMContentLoaded", completed, false );
        window.removeEventListener( "load", completed, false );
        jQuery.ready();
     };
    • jQuery对象构造器
      一般封装组件的构造器是是如何做呢?
    //定义组件函数
    function myjQuery () {
        this.name = "myjQuery";
    }
    //给组件添加功能
    myjQuery.prototype.init = function() {
        //初始化组件
    }
    //先创建,在初始化组件
    var myjQueryObj = new myjQuery();
    myjQueryObj.init();
    

    在使用jQuery时,jQuery(…)或$(….)获取jQuery对象,那么jQuery对象是如何创建的?下面的代码看出jQuery对象实际是jQuery.fn.init的对象,而jQuery.fn = jQuery.prototype,所以jQuery对象实际是jQuery原型对象函数属性的对象。

    jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
     },

    总结

    jQuery前期定义了许多变量,有函数、正则表达式和常量。这些变量在jQuery框架中发挥了全局作用,在jQuery框架中作为效率、安全和简便的工具。其中jQuery函数是jQuery框架的构造器,从其中看出jQuery在构造对象独特方式所带来编程的体验感好处。

    展开全文
  • function XXXX() persistent indx if ~exist('indx','var') || isempty(indx) indx = 1; else indx = indx+1; end end 此函数再次调用,indx有上一次调用的值。

    function XXXX()

    persistent indx
    if ~exist('indx','var') || isempty(indx)
        indx = 1;
    else
        indx = indx+1;
    end

     

    end

    此函数再次调用,indx有上一次调用的值。

    展开全文
  • python中全局变量与局部变量

    万次阅读 多人点赞 2019-03-01 15:27:17
    python中全局变量与局部变量 标签: python 局部变量就是定义在一个函数体内部的变量 全局变量是定义在外面的变量 ...在函数体内部使用全局变量 全局变量可以直接在函数体内容部使用的,你可以直接访问,...
  • 区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局...
  • 在写agnes算法时,需要合并列表,另外也在函数里使用了全局变量,碰到了一些问题,记录下来方便复习查阅。
  • 函数不能直接修改全局变量的引用 在函数内部,可以通过全局变量的引用获取对应的数据 但是,不允许直接修改全局变量的引用——使用赋值语句修改全局变量的值 ...
  • 全局变量是编程术语中的一种,源自于变量之分。变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。全局变量既可以是...
  • PHP全局变量与超级全局变量区别分析,php全局变量区别本文分析了PHP全局变量与超级全局变量区别。分享给大家供大家参考,具体如下:全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到...
  • 局部变量和全局变量是从作用域...为什么很多地方就默认为内部变量和外部变量就是局部变量和全局变量 这样子的话那么这句话怎么理解呢?![图片说明](https://img-ask.csdn.net/upload/201603/07/1457318749_145328.png)
  • 全局变量:在函数外部声明的变量或用global关键字在函数内部声明的变量 作用域:作用的范围 局部变量:作用范围在函数的内部 全局变量:作用范围横跨整个文件 ''' # (1) 局部变量的获取和修改 def func(): ...
  • 初学python时候,关于全局变量的各种问题不是容易的,小编曾经系统的跟着老师学习了一遍,如果有小伙伴和小编一样,想要知道全局变量内容,可以看下自己是否遗漏些内容,梳理一下,或者可以跟着小编看一下内容。...
  • 全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a; 超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如 $_...
  • 分享给大家供大家参考,具体如下:全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;超全局变量作用域在所有脚本都有效。...
  • python 函数内部修改全局变量

    万次阅读 2018-06-12 11:26:05
    但是当 在函数内部进行对其 赋值操作时,需要用global修饰该全局变量,因为赋值操作默认作为局部变量, 对全局变量进行赋值修改,需要进行显示global声明 每一次读取file_content时候,读取完或者开始读取的时候要...
  • 局部变量是在函数内部定义的变量,只能在函数内部使用全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量。注意:在其它的开发语言中,大都不推荐使用全局变量因为其可变范围...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,403
精华内容 5,361
关键字:

内部全局变量