简体   繁体   English

SyntaxError:严格模式不允许在词法嵌套语句中使用函数声明

[英]SyntaxError: Strict mode does not allow function declarations in a lexically nested statement

After upgrading from React Native 0.18 to 0.22 for Android, I have started to get the following error: 从React Native 0.18升级到0.22 for Android后,我开始收到以下错误:

Got JS Exception: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement.

It crashes the app at start app, and it is impossible to start debugging. 它在启动应用程序时崩溃了应用程序,无法启动调试。

As suggested by this post , I have tried to remove all 'use strict' manually as well as using build script: 正如本文所述 ,我试图手动删除所有'use strict'以及使用构建脚本:

gulp.task('transform-android', function() {
  return gulp.src(config.tasks.androidjs.src)
  .pipe(envify({NATIVE: true}))
  .pipe(babel({ 
    "stage": 0,
    blacklist: ["useStrict"]
  }))
  .pipe(gulp.dest(path.join(config.root.dest, config.tasks.androidjs.dest)));
});

There is no 'use strict' anymore in the generated code. 生成的代码中不再存在“use strict”。 However, I am still getting the exact same error. 但是,我仍然得到完全相同的错误。 I am using babel v5.8.3. 我正在使用babel v5.8.3。

Any help is highly appreciated! 任何帮助都非常感谢!

Here's my package.json 这是我的package.json

{
  "name": "xodo",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node_modules/react-native/packager/packager.sh"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "events": "^1.1.0",
    "firebase": "^2.3.1",
    "flux": "^2.0.1",
    "immutable": "3.7.3",
    "jwt-decode": "^1.4.0",
    "linkifyjs": "^2.0.0-beta.7",
    "lodash": "^3.10.1",
    "promise-queue": "^2.2.3",
    "react": "^0.14.7",
    "react-immutable-proptypes": "^1.5.1",
    "react-native": "^0.22.2",
    "react-native-invertible-scroll-view": "^0.2.0",
    "reqwest": "^1.1.5",
    "rsvp": "^3.0.18",
    "unbounce": "^0.1.0",
    "xmldom": "^0.1.22"
  },
  "devDependencies": {
    "babel": "^5.8.3",
    "del": "^2.2.0",
    "gulp": "^3.9.0",
    "gulp-babel": "^5.3.0",
    "gulp-envify": "^1.0.0",
    "gulp-less2js": "0.0.3",
    "gulp-rename": "^1.2.2",
    "gulp-replace": "^0.5.4",
    "gulp-sequence": "^0.4.0",
    "path": "^0.12.7"
  }
}

Below is the full stacktrace of the error: 下面是错误的完整堆栈跟踪:

Got JS Exception: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement.
03-29 15:15:01.567 2047-2109/com.xodo.pdf.reader E/unknown:React: Exception in native call from JS
                                                                  com.facebook.react.bridge.JSExecutionException: SyntaxError: Strict mode does not allow function declarations in a lexically nested statement. (http://10.0.3.2:8081/index.android.bundle?platform=android&dev=true&hot=false:32356)
                                                                      at com.facebook.react.bridge.ReactBridge.loadScriptFromFile(Native Method)
                                                                      at com.facebook.react.bridge.JSBundleLoader$2.loadScript(JSBundleLoader.java:58)
                                                                      at com.facebook.react.bridge.CatalystInstanceImpl$2.call(CatalystInstanceImpl.java:146)
                                                                      at com.facebook.react.bridge.CatalystInstanceImpl$2.call(CatalystInstanceImpl.java:137)
                                                                      at com.facebook.react.bridge.queue.MessageQueueThreadImpl$1.run(MessageQueueThreadImpl.java:73)
                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                      at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:184)
                                                                      at java.lang.Thread.run(Thread.java:818)

problem appears in one of the core files. 问题出现在其中一个核心文件中。 pull request is alredy created for react-native but you can make changes by yourself as workaround pull request是为react-native创建的,但您可以自己进行更改以作为变通方法

open node_modules\\react-native\\Libraries\\Core\\InitializeCore.js line 112 open node_modules \\ react-native \\ Libraries \\ Core \\ InitializeCore.js第112行

change function handleError(e, isFatal) to var handleError = function(e, isFatal) 将函数handleError(e,isFatal)更改为var handleError = function(e,isFatal)

then do npm start -- --reset-cache 然后做npm start - --reset-cache

you can find more information at https://github.com/facebook/react-native/issues/11389 您可以在https://github.com/facebook/react-native/issues/11389找到更多信息

This is not a direct answer to your problem but more of a concept or reason behind the error. 这不是您问题的直接答案,而是错误背后的概念或原因。

When an inner function is defined in a block rather than function body it will give SyntaxError. ES5 disallows function declarations on blocks (except function bodies). On the other hand, ES2015 (ES6) has relaxed this restriction.

Here is ESLint rule no-inner-declaration 这是ESLint规则no-inner-declaration

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 “函数声明不能​​嵌套在语句中” - IE 在严格模式下的错误 - “Function declarations cannot be nested inside a statement” - IE in strict mode error 严格模式是否禁止语句级函数声明? - Does strict mode prohibit statement level function declarations? Typescript和Uncaught SyntaxError:在严格模式之外尚不支持块范围的声明(let,const,function,class) - Typescript and Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode 为什么JavaScript在return语句之后允许函数声明? - Why does JavaScript allow function declarations after the return statement? 严格模式下函数的SyntaxError - SyntaxError for functions in strict mode 未捕获的 SyntaxError:严格模式代码可能不包含 with 语句 - Uncaught SyntaxError: Strict mode code may not include a with statement 打字稿错误:在严格模式下,块中不允许使用函数声明 - Typescript error : Function declarations are not permitted in blocks in strict mode 语法错误:在严格模式下使用 const - SyntaxError: Use of const in strict mode SyntaxError:'with'语句在严格模式下无效 - SyntaxError: 'with' statements are not valid in strict mode InAppBroswer:未捕获的SyntaxError:在Android App上加载js时,尚不支持块范围的声明.. 外部严格模式 - InAppBroswer: Uncaught SyntaxError: Block-scoped declarations .. not yet supported when loading js on Android App. outside strict mode
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM