“use strict”; + jQuery.getScript() = script can't export to global namespace

前端 未结 3 1374
無奈伤痛
無奈伤痛 2021-01-03 02:56

Suppose I have the following script, called include_strict.js. After it executes I should have window.global1 defined:

\"use strict         


        
3条回答
  •  感动是毒
    2021-01-03 03:28

    It uses $.getScript() which uses eval to execute the script which cannot modify the global scope in strict mode:

    Second, eval of strict mode code does not introduce new variables into the surrounding scope. In normal code eval("var x;") introduces a variable x into the surrounding function or the global scope. This means that, in general, in a function containing a call to eval every name not referring to an argument or local variable must be mapped to a particular definition at runtime (because that eval might have introduced a new variable that would hide the outer variable). In strict mode eval creates variables only for the code being evaluated, so eval can't affect whether a name refers to an outer variable or some local variable:

    Source: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode

    The solution is not using jQuery to load the script but appending a script element to the DOM. Note that you cannot even use jQuery to append the element; it will automatically use $.getScript() for it.

提交回复
热议问题